34

--- C# 가이드 --- 문자열

정규 프로그래밍의 관점에서, 문자열 문자열 데이터 유형 C#에서 가장 중요한 것 중 하나입니다. 이 유형은 문자열을 정의하고 지원합니다. 다른 많은 프로그래밍 언어에서 문자열은 문자 배열입니다. 그리고 C#에서 문자열은 객체입니다. 따라서 문자열 유형은 참조 유형 중 하나입니다.

행 건설

문자열을 구성하는 가장 쉬운 방법은 문자열 리터럴을 사용하는 것입니다. 예를 들어 다음 코드 줄에서 문자열 참조 변수 str에는 문자열 리터럴에 대한 참조가 할당됩니다.

String str = "예제 문자열";

이 경우 변수 str은 "Example String" 문자 시퀀스로 초기화됩니다. string 유형의 객체는 char 유형의 배열에서도 생성할 수 있습니다. 예를 들어:

Char chararray = ("e", "x", "a", "m", "p", "l", "e"); 문자열 str = 새로운 문자열(문자열);

string 유형의 객체가 생성되면 따옴표로 묶인 텍스트 문자열이 필요한 모든 곳에서 사용할 수 있습니다.

문자열 지속성

이상하게도 문자열 유형의 개체 내용은 수정할 수 없습니다. 이는 한 번 생성된 문자 시퀀스는 변경할 수 없음을 의미합니다. 그러나 이러한 제한은 문자열의 보다 효율적인 구현에 기여합니다. 따라서 이것은 언뜻보기에는 명백한 단점이 실제로 장점으로 바뀝니다. 따라서 기존 문자열의 변형으로 문자열이 필요한 경우 이 목적을 위해 필요한 모든 변경 사항을 포함하는 새 문자열을 만들어야 합니다. 그리고 사용하지 않는 문자열 객체는 "가비지"에 자동으로 수집되므로 불필요한 문자열의 운명에 대해 걱정할 필요조차 없습니다.

그러나 문자열 참조 변수(즉, 문자열 유형의 개체)는 변경될 수 있으므로 다른 개체를 참조할 수 있음을 강조해야 합니다. 그러나 문자열 개체 자체의 내용은 생성된 후에도 변경되지 않습니다.

예를 고려하십시오.

Static void addNewString() ( string s = "이것은 내 획입니다"; s = "이것은 새로운 획입니다"; )

애플리케이션을 컴파일하고 결과 어셈블리를 ildasm.exe 유틸리티에 로드해 보겠습니다. 그림은 void addNewString() 메서드에 대해 생성될 CIL 코드를 보여줍니다.

opcode ldstr(문자열 로드)에 대한 다중 호출에 주목하십시오. CIL의 이 ldstr opcode로 인해 관리되는 힙에 새 문자열 개체가 로드됩니다. 결과적으로 "This is my stroke" 값이 포함된 이전 개체는 결국 가비지 수집됩니다.

문자열 작업

클래스 시스템.문자열문자 데이터의 길이를 결정하고, 현재 문자열에서 부분 문자열을 검색하고, 대문자아래쪽으로 또는 그 반대로 등 이 클래스는 다음에 더 자세히 살펴보겠습니다.

String 클래스의 필드, 인덱서 및 속성

String 클래스에는 단일 필드가 정의되어 있습니다.

공용 정적 읽기 전용 문자열 비어 있음;

빈 필드는 빈 문자열을 나타냅니다. 문자를 포함하지 않는 문자열. 이것은 단순히 존재하지 않는 객체에 대해 만들어지는 빈 문자열 참조와 다릅니다.

또한 String 클래스는 단일 읽기 전용 인덱서를 정의합니다.

공개 char this( get; )

이 인덱서를 사용하면 지정된 인덱스에서 문자를 가져올 수 있습니다. 배열과 마찬가지로 문자열 인덱싱은 0부터 시작합니다. String 객체는 영구적이고 변경되지 않으므로 String 클래스가 읽기 전용 인덱서를 지원하는 것이 합리적입니다.

마지막으로 String 클래스는 단일 읽기 전용 속성을 정의합니다.

공개 정수 길이( get; )

Length 속성은 문자열의 문자 수를 반환합니다. 아래 예는 인덱서 및 Length 속성의 사용을 보여줍니다.

시스템 사용; class Example ( static void Main() ( string str = "Simple string"; // 인덱서를 사용하여 문자열의 길이와 문자열의 6번째 문자 가져오기 Console.WriteLine("String length is (0), 6th character is "(1)"" , str.Length, str); ) )

문자열 클래스 연산자

String 클래스는 == 및 !=의 두 연산자를 오버로드합니다. == 연산자는 두 문자열이 같은지 테스트하는 데 사용됩니다. == 연산자가 개체 참조에 적용될 때 일반적으로 두 참조가 동일한 개체에 대한 것인지 확인합니다. 그리고 == 연산자가 String 유형의 객체 참조에 적용되면 문자열 자체의 내용이 동일한지 비교됩니다. != 연산자에도 동일하게 적용됩니다. String 유형의 개체 참조에 적용할 때 문자열 자체의 내용이 부등식에 대해 비교됩니다. 동시에 =를 포함한 다른 관계 연산자는 다른 유형의 개체와 동일한 방식으로 String 유형의 개체에 대한 참조를 비교합니다. 그리고 한 문자열이 다른 문자열보다 큰지 확인하려면 String 클래스에 정의된 Compare() 메서드를 호출해야 합니다.

나중에 명확해지겠지만 많은 종류의 문자열 비교가 문화 정보를 사용합니다. 그러나 이것은 == 및 != 연산자에는 적용되지 않습니다. 결국, 그들은 단순히 문자열에서 문자의 서수 값을 비교합니다. (즉, 문화적 규범, 즉 로케일에 의해 수정되지 않은 이진 문자 값을 비교합니다.) 따라서 이러한 연산자는 대소문자를 구분하지 않고 문화를 구분하지 않는 방식으로 문자열 비교를 수행합니다.

문자열 클래스 메서드

다음 표에는 이 클래스의 몇 가지 흥미로운 메서드가 목적별로 그룹화되어 나열되어 있습니다.

문자열 메서드
방법 구조 및 오버로드된 버전 목적
문자열 비교
비교하다() public static int 비교(문자열 strA, 문자열 strB)

공용 정적 int 비교(문자열 strA, 문자열 strB, bool ignoreCase)

공용 정적 int 비교(문자열 strA, 문자열 strB, StringComparison 비교 유형)

공용 정적 int 비교(문자열 strA, 문자열 strB, bool ignoreCase, CultureInfo 문화권)

정적 메서드, 문자열 strA를 문자열 strB와 비교합니다. strA가 strB보다 크면 양수를 반환합니다. strA가 strB보다 작으면 음수이고, 그렇지 않으면 음수입니다. 문자열 strA와 strB가 같으면 0입니다. 비교는 대소문자를 구분하고 문화적으로 구분합니다.

ignoreCase 매개변수가 부울 true인 경우 비교 시 대문자와 소문자의 차이가 고려되지 않습니다. 그렇지 않으면 이러한 차이가 고려됩니다.

compareType 매개변수는 문자열이 비교되는 특정 방법을 지정합니다. CultureInfo 클래스는 System.Globalization 네임스페이스에 정의되어 있습니다.

public static int Compare(문자열 strA, int indexA, 문자열 strB, int indexB, int 길이)

공용 정적 int 비교(문자열 strA, int indexA, 문자열 strB, int indexB, int 길이, bool ignoreCase)

Public 정적 int Compare(문자열 strA, int indexA, 문자열 strB, int indexB, int 길이, StringComparison comparisonType)

공용 정적 int 비교(문자열 strA, int indexA, 문자열 strB, int indexB, int 길이, bool ignoreCase, CultureInfo 문화권)

strA 및 strB 문자열의 일부를 비교합니다. 비교는 문자열 요소 strA 및 strB로 시작하고 길이 매개변수로 지정된 문자 수를 포함합니다. 이 메서드는 strA의 일부가 strB의 일부보다 크면 양수 값을 반환합니다. strA의 일부가 strB의 일부보다 작은 경우 음수 값입니다. strA 및 strB 문자열의 비교된 부분이 같으면 0입니다. 비교는 대소문자를 구분하고 문화적으로 구분합니다.

비교서수() public static int CompareOrdinal(문자열 strA, 문자열 strB)

공용 정적 int CompareOrdinal(문자열 strA, int indexA, 문자열 strB, int indexB, int count)

Compare() 메서드와 동일하지만 로컬 설정은 고려하지 않습니다.

비교 대상() public int CompareTo(객체 값)

호출 문자열을 값 개체의 문자열 표현과 비교합니다. 호출 문자열이 문자열 값보다 크면 양수 값을 반환합니다. 호출 문자열이 값 문자열보다 작은 경우 음수 값입니다. 비교된 문자열이 같으면 0

public int CompareTo(문자열 strB)

호출 문자열을 strB와 비교합니다.

같음() 공개 재정의 bool Equals(객체 obj)

호출 문자열에 obj의 문자열 표현과 동일한 문자 시퀀스가 ​​포함되어 있으면 부울 true를 반환합니다. 대소문자를 구분하지만 문화적으로 구분하지 않는 서수 비교를 수행합니다.

public bool Equals(문자열 값)

Public bool Equals(문자열 값, StringComparison 비교 유형)

호출 문자열에 문자열 값과 동일한 문자 시퀀스가 ​​포함되어 있으면 부울 값 true를 반환합니다. 서수 비교는 대소문자를 구분하지만 문화적으로 구분하지 않고 수행됩니다. compareType 매개변수는 문자열을 비교하는 특정 방법을 정의합니다.

public static bool Equals(문자열 a, 문자열 b)

공용 정적 bool Equals(문자열 a, 문자열 b, StringComparison 비교 유형)

문자열 a에 문자열 b와 동일한 문자 시퀀스가 ​​포함되어 있으면 부울 true를 반환합니다. 서수 비교는 대소문자를 구분하지만 문화적으로 구분하지 않고 수행됩니다. compareType 매개변수는 문자열을 비교하는 특정 방법을 정의합니다.

문자열의 연결(연결)
연결() 공개 정적 문자열 Concat(문자열 str0, 문자열 str1);

공개 정적 문자열 Concat(params 문자열 값);

개별 문자열 인스턴스를 단일 문자열로 결합(연결)
문자열에서 검색
포함() public bool 포함(문자열 값) 문자열에 특정 부분 문자열(값)이 포함되어 있는지 확인할 수 있는 방법
다음으로 시작() public bool StartsWith(문자열 값)

Public bool StartsWith(문자열 값, StringComparison 비교 유형)

호출 문자열이 값 하위 문자열로 시작하는 경우 부울 true를 반환합니다. 그렇지 않으면 부울 값 false가 반환됩니다. compareType 매개변수는 검색 수행 방법을 지정합니다.

로 끝나다() public bool EndsWith(문자열 값)

Public bool EndsWith(문자열 값, StringComparison 비교 유형)

호출 문자열이 값 하위 문자열로 끝나는 경우 부울 true를 반환합니다. 그렇지 않으면 부울 값 false를 반환합니다. compareType 매개변수는 특정 검색 방법을 정의합니다.

IndexOf() 공개 int IndexOf(문자 값)

Public int IndexOf(문자열 값)

문자열에서 지정된 하위 문자열 또는 문자의 첫 번째 항목을 찾습니다. 찾고 있는 문자나 부분 문자열이 없으면 -1이 반환됩니다.

공개 int IndexOf(문자 값, int startIndex)

Public int IndexOf(문자열 값, int startIndex)

Public int IndexOf(char 값, int startIndex, int 개수)

Public int IndexOf(문자열 값, int startIndex, int 개수)

호출 문자열에서 문자 또는 하위 문자열 값이 처음 나타나는 인덱스를 반환합니다. 검색은 인덱스 startIndex에 지정된 요소에서 시작하고 count 매개변수(지정된 경우)로 지정된 요소 수에 걸쳐 있습니다. 검색된 문자 또는 하위 문자열을 찾을 수 없는 경우 메서드는 -1을 반환합니다.

LastIndexOf() 오버로드된 버전은 IndexOf() 메서드와 유사합니다.

IndexOf와 동일하지만 첫 번째 문자 대신 마지막 문자 또는 하위 문자열을 찾습니다.

IndexOfAny() 공개 int IndexOfAny(char anyOf)

공개 int IndexOfAny(char anyOf, int startIndex)

공개 int IndexOfAny(char anyOf, int startIndex, int 개수)

호출 문자열에서 찾은 anyOf 배열의 모든 문자가 처음으로 나타나는 인덱스를 반환합니다. 검색은 인덱스 startIndex에 의해 지정된 요소에서 시작하고 count 매개변수(있는 경우)에 의해 지정된 요소 수에 걸쳐 있습니다. 이 메서드는 anyOf 배열의 문자에 대해 일치하는 항목이 없으면 -1을 반환합니다. 검색은 서수 방식으로 수행됩니다.

LastIndexOfAny 오버로드된 버전은 IndexOfAny() 메서드와 유사합니다.

호출 문자열에서 찾은 anyOf 배열의 마지막 문자 인덱스를 반환합니다.

문자열 분할 및 연결
나뉘다 공개 문자열 분할(params 문자 구분 기호)

Public string Split(params char 구분자, int count)

지정된 문자 또는 문자열 배열의 요소에 의해 서로 구분된 이 인스턴스 내부에 있는 하위 문자열이 있는 문자열 배열을 반환하는 메서드입니다.

Split() 메서드의 첫 번째 형식은 호출 문자열을 구성 요소 부분으로 분할합니다. 결과는 호출 문자열에서 검색된 하위 문자열을 포함하는 배열입니다. 이러한 하위 문자열을 구분하는 문자는 구분 기호 배열로 전달됩니다. 구분 기호 배열이 비어 있거나 빈 문자열을 참조하는 경우 공백이 하위 문자열 구분 기호로 사용됩니다. 그리고 두 번째 형태로 이 방법 count 매개변수에 의해 지정된 부분 문자열의 수를 반환합니다.

공개 문자열 Split(params 문자 구분 기호, StringSplitOptions 옵션)

공개 문자열 분할(문자열 구분 기호, StringSplitOptions 옵션)

Public string Split(params char 구분 기호, int count, StringSplitOptions 옵션)

Public string Split(문자열 구분 기호, 정수 개수, StringSplitOptions 옵션)

Split() 메서드의 처음 두 가지 형식은 호출 문자열을 부분으로 분할하고 호출 문자열에서 얻은 하위 문자열을 포함하는 배열을 반환합니다. 이러한 하위 문자열을 구분하는 문자는 구분 기호 배열로 전달됩니다. 구분 기호 배열이 비어 있으면 공백이 구분 기호로 사용됩니다. 그리고 이 메서드의 세 번째 및 네 번째 형식에서는 count 매개 변수에 의해 제한되는 행 수가 반환됩니다.

그러나 모든 형식에서 options 매개변수는 두 개의 구분 기호가 인접할 때 생성되는 빈 문자열을 처리하는 특정 방법을 지정합니다. StringSplitOptions 열거형은 다음 두 값만 정의합니다. 없음그리고 빈 항목 제거. options 매개변수가 None이면 분할의 최종 결과에 빈 문자열이 포함됩니다. 원래 문자열. 그리고 options 매개변수가 RemoveEmptyEntries로 설정되어 있으면 원래 문자열을 분할한 최종 결과에서 빈 문자열이 제외됩니다.

가입하다() public static string Join(문자열 구분 기호, 문자열 값)

Public static string Join(문자열 구분 기호, 문자열 값, int startIndex, int count)

문자열 배열의 내용을 결합하여 새 문자열을 생성합니다.

Join() 메서드의 첫 번째 형식은 값 배열에 전달된 연결된 하위 문자열로 구성된 문자열을 반환합니다. 두 번째 형식은 값 배열에 전달된 하위 문자열로 구성된 문자열도 반환하지만 값 배열의 요소에서 시작하여 특정 개수만큼 연결됩니다. 두 형식에서 각각의 연속적인 행은 separator 매개변수에 의해 지정된 분리자 문자열에 의해 이전 행과 분리됩니다.

채우기 및 트리밍 라인
손질() 공개 문자열 Trim()

공개 문자열 Trim(params char trimChars)

현재 문자열의 시작과 끝에서 지정된 문자 집합의 모든 발생을 제거할 수 있는 메서드입니다.

Trim() 메서드의 첫 번째 형식은 호출 문자열에서 선행 및 후행 공백을 제거합니다. 그리고 이 메서드의 두 번째 형식은 trimChars 배열에서 호출하는 문자열의 선행 및 후행 발생을 제거합니다. 두 형식 모두 결과 문자열을 반환합니다.

왼쪽 패드() 공개 문자열 PadLeft(int totalWidth)

공개 문자열 PadLeft(int totalWidth, char paddingChar)

문자열을 왼쪽에 있는 문자로 채울 수 있습니다.

PadLeft() 메서드의 첫 번째 형식은 호출 문자열의 왼쪽에 공백을 도입하여 전체 길이가 값과 동일 totalWidth 매개변수. 이 메서드의 두 번째 형식에서는 paddingChar 매개 변수가 나타내는 문자가 호출 문자열의 왼쪽에 입력되어 전체 길이가 totalWidth 매개 변수의 값과 같게 됩니다. 두 형식 모두 결과 문자열을 반환합니다. totalWidth 매개변수의 값이 호출 문자열의 길이보다 작으면 수정되지 않은 호출 문자열의 복사본이 반환됩니다.

오른쪽 패드() PadLeft()와 유사함

문자열을 오른쪽에 있는 문자로 채울 수 있습니다.

행 삽입, 삭제 및 바꾸기
끼워 넣다() 공개 문자열 삽입(int startIndex, 문자열 값)

한 문자열을 다른 문자열에 삽입하는 데 사용됩니다. 여기서 value는 인덱스 startIndex에서 호출 문자열에 삽입할 문자열입니다. 이 메서드는 결과 문자열을 반환합니다.

제거하다() 공개 문자열 제거(int startIndex)

공개 문자열 제거(int startIndex, int 개수)

문자열의 일부를 제거하는 데 사용됩니다. Remove() 메서드의 첫 번째 형식에서 제거는 인덱스 startIndex에 의해 지정된 위치에서 시작하여 문자열 끝까지 계속 수행됩니다. 그리고 이 메소드의 두 번째 형식에서는 startIndex 인덱스로 지정된 위치부터 count 매개변수로 지정된 문자 수를 문자열에서 제거합니다.

바꾸다() 공개 문자열 바꾸기(char oldChar, char newChar)

공개 문자열 바꾸기(문자열 oldValue, 문자열 newValue)

문자열의 일부를 대체하는 데 사용됩니다. Replace() 메서드의 첫 번째 형식은 호출 문자열에 있는 모든 oldChar를 newChar로 바꿉니다. 그리고 이 메서드의 두 번째 형식에서 호출 문자열에서 oldValue 문자열의 모든 발생은 newValue 문자열로 대체됩니다.

케이스 변경
ToUpper() 공개 문자열 ToUpper()

호출 문자열의 모든 문자를 대문자로 표시합니다.

아래로() 공개 문자열 ToLower()

호출 문자열의 모든 문자를 소문자로 만듭니다.

문자열에서 부분 문자열 얻기
부분 문자열() 공개 문자열 하위 문자열(int startIndex)

공개 문자열 하위 문자열(int startIndex, int 길이)

Substring() 메서드의 첫 번째 형식에서 하위 문자열은 startIndex 매개 변수가 나타내는 위치에서 호출 문자열 끝까지 추출됩니다. 그리고 이 방법의 두 번째 형식에서는 startIndex 매개변수가 지정하는 위치에서 시작하여 length 매개변수로 지정된 문자 수로 구성된 부분 문자열이 추출됩니다.

다음 프로그램 예제에서는 위의 몇 가지 방법을 사용합니다.

시스템 사용; System.Collections.Generic 사용; System.Linq를 사용하여; System.Text 사용; namespace ConsoleApplication1 ( class Program ( static void Main(string args)) ( // 처음 두 문자열을 비교합니다. string s1 = "이것은 문자열입니다."; string s2 = "이것은 텍스트입니다, 이것은 문자열입니다"; if (String.CompareOrdinal (s1, s2) != 0) Console.WriteLine("문자열 s1과 s2가 같지 않습니다"); if (String.Compare(s1, 0, s2, 13, 10, true) == 0) Console.WriteLine( "하지만 동일한 텍스트를 포함합니다"); // 문자열 연결 Console.WriteLine(String.Concat("\n" + "One, two ","three, four")); // 문자열에서 검색 // 첫 번째 항목 of substring if (s2. IndexOf("this") != -1) Console.WriteLine("\"this\" 단어가 줄에서 발견되었습니다. "+ "at: (0) position", s2입니다. IndexOf("this")); / / 부분 문자열의 마지막 출현 if (s2.LastIndexOf("this") != -1) Console.WriteLine("\"this\"의 마지막 출현은 " + "at ( 0) position", s2.LastIndexOf("this" )); // 문자 배열에서 검색 char myCh = ("S","x","t"); if (s2.IndexOfAny(myCh) != -1) Console.WriteLine("현재 배열에서 찾은 ch "+"의 문자 중 하나 위치 (0)의 현재 줄", s2.IndexOfAny(myCh)); // 문자열이 주어진 부분 문자열로 시작하는지 판단 if (s2.StartsWith("this is text") == true) Console.WriteLine("Substring found!"); // 문자열에 하위 문자열이 포함되어 있는지 확인 // 사용자의 OS 문자열 결정 예제를 사용하여 myOS = Environment.OSVersion.ToString(); if (myOS.Contains("NT 5.1")) Console.WriteLine("사용자의 OS 윈도우 시스템 XP"); else if (myOS.Contains("NT 6.1")) Console.WriteLine("당신의 운영 체제 Windows 7"); Console.ReadLine(); ) ) )

C#의 문자열 비교에 대한 약간의 정보

모든 문자열 처리 작업 중에서 한 문자열을 다른 문자열과 비교하여 가장 자주 수행되는 작업일 것입니다. 문자열 비교 방법을 살펴보기 전에 다음을 강조해야 합니다. 문자열 비교는 .NET Framework에서 두 가지 주요 방법으로 수행할 수 있습니다.

    첫째, 비교는 프로그램이 실행될 때 영향을 미치는 문화적 환경인 특정 문화 환경의 관습과 규범을 반영할 수 있습니다. 이것은 전부는 아니지만 일부 비교 방법에 대한 표준 동작입니다.

    그리고 둘째, 문자열을 구성하는 문자의 서수값에 대해서만 문화환경 설정에 관계없이 비교가 가능하다. 일반적으로 문화적으로 구분하지 않는 문자열 비교는 사전순(및 언어적 특징)을 사용하여 한 문자열이 다른 문자열보다 크거나 작거나 같은지 여부를 결정합니다. 서수 비교에서 문자열은 각 문자의 수정되지 않은 값을 기준으로 간단히 정렬됩니다.

문화권과 서수 비교 간에 문자열을 비교하는 방법의 차이와 이러한 비교의 의미 때문에 현재 Microsoft에서 제공하는 모범 사례를 사용하는 것이 좋습니다. 결국 문자열을 비교하는 잘못된 방법을 선택하면 프로그램이 개발된 환경과 다른 환경에서 작동할 때 프로그램이 잘못 작동할 수 있습니다.

문자열을 비교하는 방법을 선택하는 것은 매우 중요한 결정입니다. 일반적으로 예외 없이 사용자에게 결과를 표시하려는 경우(예: 사전순으로 정렬된 일련의 문자열을 표시하려는 경우) 문화적으로 민감한 문자열 비교를 선택해야 합니다. 그러나 문자열에 파일 이름과 같이 문화적 차이를 위해 수정되지 않은 고정 정보가 포함된 경우 예어, 웹 사이트 주소 또는 보안 관련 값인 경우 서수 문자열 비교를 선택해야 합니다. 물론 개발 중인 특정 응용 프로그램의 특성에 따라 문자열을 비교하는 적절한 방법을 선택해야 합니다.

String 클래스는 위의 표에 나열된 다양한 문자열 비교 방법을 제공합니다. 그 중 가장 다재다능한 것은 Compare() 메서드입니다. 유형 매개변수에 의해 결정되는 비교 방식으로 두 문자열 전체 또는 일부(대소문자 구분 또는 대소문자 구분)를 비교할 수 있습니다. 문자열 비교, 유형 매개변수에서 제공하는 문화 정보뿐 아니라 문화정보.

StringComparison 형식의 매개 변수를 포함하지 않는 Compare() 메서드의 이러한 오버로드는 문자열의 대/소문자 구분 및 문화권 구분 비교를 수행합니다. 그리고 CultureInfo 유형의 매개변수를 포함하지 않는 오버로드된 변형에서 문화권 정보는 현재 런타임 환경에 의해 결정됩니다.

StringComparison 유형은 아래 표와 같은 값을 정의하는 열거형입니다. 이러한 값을 사용하여 응용 프로그램의 요구 사항에 맞는 문자열 비교를 구성할 수 있습니다. 따라서 StringComparison 유형 매개변수를 추가하면 Compare() 메서드 및 Equals()와 같은 기타 비교 메서드의 기능이 확장됩니다. 또한 문자열을 비교하는 방법을 명확하게 지정할 수 있습니다.

문화적으로 민감한 문자열 비교와 서수 비교의 차이점 때문에 이 점에서 가능한 한 정확해야 합니다.

StringComparison 열거형에 정의된 값
의미 설명
CurrentCulture 문자열 비교는 현재 문화권 설정을 사용하여 수행됩니다.
CurrentCultureIgnoreCase 문자열 비교는 현재 문화권 설정을 사용하여 수행되지만 대소문자를 구분하지 않습니다.
불변문화 문자열 비교는 변경할 수 없는 것을 사용하여 수행됩니다. 문화 환경에 대한 보편적인 데이터
InvariantCultureIgnoreCase 문자열 비교는 변경할 수 없는 것을 사용하여 수행됩니다. 보편적인 문화 데이터 및 대소문자 구분
서수 문자열 비교는 문자열에 있는 문자의 서수 값을 사용하여 수행됩니다. 이 경우 사전순서에 위배될 수 있으며, 관습특정 문화적 환경에서 받아들여지는 것은 무시된다.
OrdinalIgnoreCase 문자열 비교는 문자열에 있는 문자의 서수 값을 사용하여 수행되지만 대소문자를 구분하지 않습니다.

두 경우 모두 Compare() 메서드는 비교되는 첫 번째 문자열이 두 번째 문자열보다 작으면 음수 값을 반환합니다. 비교되는 첫 번째 문자열이 두 번째 문자열보다 크면 양수 값입니다. 비교된 두 문자열이 모두 같으면 마지막으로 0입니다. Compare() 메서드는 비교할 문자열이 같으면 0을 반환하지만 일반적으로 Equals() 메서드나 == 연산자를 사용하여 문자열이 같은지 확인하는 것이 좋습니다.

사실은 Compare() 메서드가 정렬 순서에 따라 비교된 문자열의 동등성을 결정한다는 것입니다. 예를 들어 문자열을 문화적으로 비교하는 경우 두 문자열은 정렬 순서가 같을 수 있지만 본질적으로 같지는 않습니다. 기본적으로 문자열 동등성은 Equals() 메서드에서 문화적으로가 아니라 문자의 서수 값을 기반으로 결정됩니다. 따라서 기본적으로 == 연산자에서 수행되는 방식과 유사하게 이 메서드에서는 두 문자열이 모두 문자별로 절대적으로 동일하게 비교됩니다.

Compare() 메서드가 매우 다양함에도 불구하고 문자열의 간단한 서수 비교에는 CompareOrdinal() 메서드를 사용하는 것이 더 쉽습니다. 마지막으로 CompareTo() 메서드는 문화적으로 민감한 방식으로 문자열만 비교한다는 점에 유의하십시오.

다음 프로그램은 문자열을 비교하기 위해 Compare(), Equals(), CompareOrdinal() 메서드, == 및 != 연산자를 사용하는 방법을 보여 줍니다. 비교의 처음 두 가지 예는 문화적으로 민감한 문자열 비교와 영어 서수 비교의 차이점을 명확하게 보여줍니다.

시스템 사용; 클래스 예제 ( 정적 무효 Main() ( 문자열 str1 = "알파"; 문자열 str2 = "알파"; 문자열 str3 = "베타"; 문자열 str4 = "알파"; 문자열 str5 = "알파, 베타"; int 결과; / / 먼저 문화권 구분 문자열 비교와 서수 비교 결과의 차이점을 보여줍니다. result = String.Compare(str1, str2, StringComparison.CurrentCulture); Console.Write("문화권 구분 문자열 비교: "); if (result 0 ) 콘솔 .WriteLine(str1 + "가 " + str2보다 큼); else Console.WriteLine(str1 + "is " + str2); result = String.Compare(str1, str2, StringComparison.Ordinal); Console.Write("서수 비교 lines: "); if (result 0) Console.WriteLine(str1 + "이 " + str2보다 큼); else Console.WriteLine(str1 + " is equal to " + str4); // CompareOrdinal() 메서드 사용 결과 = String.CompareOrdinal( str1, str2); Console.Write("CompareOrdinal()을 사용하여 문자열 비교:\n"); if (결과 0) Console.WriteLine(str1 + "보다 큼" + str2); else Console.WriteLine (스트 1 + "는 " + str4와 같음); Console.WriteLine(); // == 연산자를 사용하여 문자열 동등성 결정 // 이것은 문자열의 서수 비교 if (str1 == str4) Console.WriteLine(str1 + " == " + str4); // != 연산자를 사용하여 라인 부등식 감지 if(str1 != str3) Console.WriteLine(str1 + " != " + str3); if(str1 != str2) Console.WriteLine(str1 + " != " + str2); Console.WriteLine(); // Equals() 메서드를 사용하여 서수 대소문자를 구분하지 않는 문자열 비교를 수행합니다. if(String.Equals(str1, str2, StringComparison.OrdinalIgnoreCase)) Console.WriteLine("OrdinalIgnoreCase 매개변수를 사용하여 Equals() 메서드를 사용하여 문자열 비교 : \n" + str1 + "는 " + str2)와 같습니다. Console.WriteLine(); // 문자열의 일부 비교 if(String.Compare(str2, 0, str5, 0, 3, StringComparison.CurrentCulture) > 0) ( Console.WriteLine("현재 문화권을 기반으로 문자열 비교:" + "\n3개의 첫 번째 문자 문자열 " + str2 + "가 문자열 " + str5)의 처음 3개 문자보다 큽니다. ) ) )

이 프로그램을 실행하면 다음과 같은 결과가 생성됩니다.

C 언어에는 별도의 데이터 유형 "문자열"이 없습니다. 문자열 작업은 char 유형의 1차원 배열을 사용하여 구현됩니다. 문자열은 널 바이트로 끝나는 1차원 문자 배열입니다.

널 바이트는 각 비트가 0인 바이트이며, 문자 상수 '\0'(줄 종결자 또는 널 종결자)은 널 바이트에 대해 정의됩니다. 따라서 문자열에 k 문자가 포함되어야 하는 경우 배열 설명에 k+1 요소를 지정해야 합니다.

예를 들어, char a; - 문자열은 6자를 포함할 수 있으며 마지막 바이트는 0으로 예약되어 있음을 의미합니다.

문자열 상수는 다음으로 묶인 문자 집합입니다. 큰따옴표. 예를 들어:

char S="문자열 작업";

문자열 상수 끝에 문자 '\0'을 명시적으로 지정할 필요가 없습니다.

문자열로 작업할 때 포인터를 사용하는 것이 편리합니다. 예를 들면 다음과 같습니다.

x = "BSUIR";

x = (i>0)? "긍정적인":(나는<0)? "отрицательное":"нулевое";

문자열을 입력하는 데 일반적으로 두 가지 표준 함수가 사용됩니다.

스캔()- 입력 지정자를 사용하여 문자열 변수에 대한 값을 도입합니다. %에스첫 번째 "공백" 문자가 나타나기 전(문자열 데이터 ID 앞에 "&" 문자를 지정할 필요가 없음);

가져오기()- 이 줄 안에 공백이 있는 줄 입력은 ENTER 키를 누르면 완료됩니다.

두 함수 모두 자동으로 문자열을 null 바이트로 끝냅니다.

라인은 첫 번째 널 바이트('\0')까지 printf() 또는 puts() 함수에 의해 출력됩니다.

printf()출력 후 커서를 새 줄의 시작 부분으로 이동하지 않습니다.

넣다()문자열 정보 출력 후 자동으로 커서를 새 줄의 시작 부분으로 이동합니다.

예를 들어:

printf(" 공백 없이 문자열을 입력하세요: \n");

scanf("%s",Str);

puts("문자열을 입력하세요");

문자열에 대한 나머지 작업은 프로토타입이 파일에 설명된 표준 라이브러리 함수를 사용하여 수행됩니다. 문자열.h. 가장 많이 사용되는 기능을 살펴보겠습니다.

정수 함수 스트렌(char *S)는 종료 null 바이트를 무시하고 문자열의 길이(문자열의 문자 수)를 반환합니다.

char *S1=”민스크!\0”, S2=”BSUIR-만세!”;

printf(" %d, %d .", strlen(S1), strlen(S2));

이 프로그램 섹션의 결과:

정수 함수 strcpy(char *S1, char *S2) - 문자열 S2의 내용을 문자열 S1에 복사합니다.

기능 strcat(char *S1, char *S2) - 문자열 S2를 문자열 S1에 결합하고 문자열 S1이 있던 배열에 배치하지만 문자열 S2는 변경되지 않습니다. 문자열 S1을 종료한 널 바이트는 문자열 S2의 첫 번째 문자로 대체됩니다.

정수 함수 strcmp(char *S1, char *S2)는 문자열 S1과 S2를 비교하여 값을 반환합니다.<0, если S1S1>S2인 경우 0; 문자열이 같으면 =0, 즉 동일한 수의 동일한 문자를 포함합니다.

문자열 S를 숫자로 변환하는 함수:

정수: 정수 아토이(char*S);

긴 정수: 긴 환초(char*S);

실제: 더블 아토프(char*S);

오류가 발생하면 이 함수는 0을 반환합니다.

숫자 V를 문자열 S로 변환하는 함수입니다.

»신뢰할 수 있는 SEO 대행사 인도는 중소기업의 수익을 높일 수 있습니다.

80%의 사용자는 구매하기 전에 Google 및 기타 검색 엔진에서 검색하고 검색 엔진을 통해 생성된 문의 50% 이상은 변환됩니다. 이 두 가지 통계는 검색 엔진 최적화의 중요성을 증명합니다. 명확한 요점을 보여주는 통계 및 사실이 많이 있습니다. 모든 소규모, 중간 규모 또는 대규모 비즈니스에는 전문적인 SEO 서비스가 필요합니다. 중소기업과 스타트업은 종종 예산 문제에 직면합니다. 그들은 수입을 늘리기 위해 예산 내에서 최고의 SEO 서비스를 얻기 위해 인도의 신뢰할 수 있는 SEO 대행사의 도움을 받을 수 있습니다.
검색은 소비자의 마음에 큰 영향을 미칩니다. Search Engine Land, Moz, SEO Journal, Digital Marketers India, Hubspot 등과 같은 다양한 공인 웹사이트에서 주요 검색 엔진 최적화 전문가들이 공유한 다양한 통계에 따르면 SEO는 리드의 대부분을 포착합니다. 또한 자연 검색 결과에서 오는 리드는 전환율이 더 높습니다. 이러한 통계와 소비자 행동은 최고의 SEO 서비스가 사치품이 아니라 모든 비즈니스의 필수품이라는 점을 더욱 분명하게 보여줍니다.
경쟁을 우회하고 비즈니스 성장을 높이려면 각 조직에서 검색 엔진 최적화 서비스를 사용해야 합니다. 큰 브랜드는 최고의 SEO 회사나 SEO 전문가가 제공하는 전문 SEO 서비스에 충분한 돈을 투자할 수 있지만 소규모 비즈니스 소유자는 적은 예산으로 인해 종종 이 서비스의 품질을 타협합니다. 중소기업과 신생 기업이 전문 SEO 서비스로 만들 수 있는 기회를 놓치거나 긍정적인 결과를 내지 못하는 저렴한 SEO 서비스를 사용하게 된다는 것은 어려운 사실입니다.
소규모 비즈니스 소유자와 스타트업은 제한된 예산으로도 전문적인 SEO 서비스의 이점을 누릴 수 있습니다. 최고의 솔루션은 인도에 기반을 둔 신뢰할 수 있는 SEO 회사를 찾는 것입니다. 인도에는 디지털 마케팅 대행사와 협력하여 업계 최고의 서비스를 제공하는 많은 SEO 전문가가 있습니다. 그들은 귀하의 예산에 필요한 SEO 서비스를 제공할 수 있습니다. 임금은 SEO 대행사 India와 협상하여 더 낮은 가격으로 더 나은 서비스를 받을 수 있습니다. 그러나 비용이 적게 드는 저렴한 SEO 서비스에 속지 말고 전문 지식이 자체 비용으로 제공되므로 더 많이 제공하겠다고 약속하지 마십시오. 귀하의 비즈니스를 위해 회사에 계약하기 전에 포트폴리오를 보거나 적절한 질문을 해야 합니다.
인도의 SEO 전문가는 검색 엔진 최적화의 모범 사례에 능숙합니다. 또한 Ash Vyas와 같은 인도에는 명시된 예산 내에서 비즈니스를 위한 최고의 검색 엔진 최적화 전략을 전문적으로 만드는 일부 SEO 전문가가 있습니다. SEO 전문가는 명확한 계획을 세우고 예상 결과를 공유할 것입니다. 이렇게 하면 투자와 수익을 잘 알 수 있습니다. 이는 더 나은 비즈니스 결정을 내리는 데 도움이 됩니다.
가능한 한 빨리 최고의 SEO 서비스를 제공하는 신뢰할 수 있는 인도의 SEO 회사를 찾아 계약하는 것이 좋습니다. 또한 적은 예산과 제한된 활동으로 시작하여 웹페이지 색인을 생성하고 검색 엔진에서 키워드를 높일 수 있습니다. 최고의 SEO 서비스에 투자할 수 있는 완벽한 시간이나 날을 기다리지 마십시오. 일찍 시작하면 마케팅 접근 방식을 공격적으로 진행할 수 있을 때 더 빠른 결과를 얻을 수 있습니다. 인도에 기반을 둔 신뢰할 수 있는 SEO 회사가 귀하의 현재 및 미래 계획을 정의하여 좋은 결과를 얻을 수 있도록 도와드립니다. 더 많은 색인 페이지는 순위를 높이고 지속적인 전문 SEO 관행으로 만들어진 신뢰할 수 있는 비즈니스 브랜드는 문의, 비즈니스 및 수익을 두 배로 늘릴 것입니다. 모든 소규모 비즈니스는 전문 SEO 서비스에 두 자릿수 투자로 시작할 수 있습니다. 인도에는 낮은 예산을 제공하지만 지향적인 검색 엔진 최적화 서비스의 결과를 제공하는 많은 SEO 대행사가 있습니다.

망명에서 설문 조사

  • CraigWew

    12.04.2018

    »부동산 및 일반 판매에서 고객과의 관계 구축의 중요성

    고객과의 관계 구축의 중요성.
    고객과의 관계 구축은 반드시 이루어져야 하며 판매 프로세스의 매우 중요한 부분으로 접근해야 합니다.
    고객과 자신이 실제 일대일 관계를 맺기 위해서는 두 가지가 필요합니다!
    첫째, 당신은 인식하고 거기에 있어야합니다! 두 번째로 이 과정에서 발생하는 두 가지 다른 단계가 있음을 이해해야 합니다.
    A-Be 거기-그게 무슨 뜻이야?
    o 대부분의 사람들은 다른 사람의 말을 잘 듣지 않습니다. 일반적으로 그들은 다음 답변이나 진술을 공식화하는 데 너무 바빠서 제대로 들을 수 없습니다.
    o 이것이 당신처럼 들리면 거기에 있다는 것은 닥치고 들어라는 의미입니다!
    B-첫 번째 또는 초기 단계는 무엇입니까?
    o 일반적으로 고객의 마음 속에 고객이 대하고 싶은 사람으로 자신을 확립할 수 있는 시간이 몇 분밖에 없습니다.
    o 확신이 서지 않을 때 먼저 질문을 던지고 자신에 대해 이야기할 수 있는 질문을 하는 것이 가장 좋습니다.
    o 프로로 등장하는 것도 언제나 안전합니다. - 금욕적이거나 건방진 게 아니라 자신이 하는 일을 알고 이야기하고 그 역할을 하는 사람입니다.
    C-기타 스테이지
    o 시간이 지남에 따라 그들이 가질 대화와 질문을 통해 당신은 당신의 능력을 확립하게 될 것입니다.
    o 그들은 아마도 한동안 당신을 측정할 것이라는 점에 유의하십시오. 좋은 소식은 어느 시점에서 당신이 성공적으로 관계를 맺었다면 그들은 긴장을 풀고 둘 다 집을 찾거나 파는 데 집중할 수 있다는 것입니다.
    내가 관계를 발전시키는 데 도움이 될 수 있는 것은 무엇입니까?
    o 다양한 성격 유형을 이해하려고 노력한 다음 올바른 질문을 말하고 질문합니다.
    o 좋은 관계(고객과 같은 파장을 가짐)가 있으면 판매는 기본적으로 끝났습니다. 이제 적합한 집을 찾거나 목록 서류를 작성하는 일만 남았습니다.
    성격이 다르면 어쩌지
    o 이 책은 정신의학에 관한 책이 아니므로 지금은 두 가지 주요 유형만 이해하십시오.
    o 내성적인 사람과 외향적인 사람이 있습니다.
    o 당신은 유형을 알고 있습니다. 각 분류에 맞는 당신이 아는 세 사람에 대해 생각해 보십시오.
    신체 언어와 언어 패턴은 어떻습니까?
    o 만약 그들이 빠르거나 느리다면 그들의 말투를 흉내내십시오.
    o 그들이 크거나 작게 말하면 똑같이 하십시오. 그들은 앞으로 또는 뒤로 기울고 있습니까?
    o 말할 필요도 없이, 이 주제에 대해 쓰여진 책들이 많이 있습니다. 특히 회의실이나 누군가의 집에서 $400,000 거래를 논의할 때 중요한 요소입니다.
    관계를 발전시키는 것은 배우고 향상시킬 수 있는 기술입니다.
    o 우리 모두는 우리에게 무언가를 판매한 판매원을 경험했지만 우리는 판매되고 있다는 느낌을 받지 못했습니다. 그 이유는 그 또는 그녀가 당신이 그들을 믿을 수 있는 곳에서 편안함을 느끼게 해주기 때문입니다.
    우리는 어떻게 관계를 발전시킬 수 있습니까?
    o 눈과 귀를 사용하여 질문하십시오. 설명하기
    o 눈을 사용하십시오:
    o 그들의 드레스-차-개인 소유물을 보라. 그리고 나는 정말로 그들을 보고 그것이 그들에 대해 당신에게 말하는 것을 해독한다는 것을 의미합니다.
    o 귀를 사용하십시오:
    o 그들이 말하는 것을 듣고 그들의 진정한 동기를 파악하기 위해 질문을 하십시오!
    이제 이 모든 대화를 하는 동안 그들과 공통점을 발견하게 될 한두 가지가 있을 것입니다. (가족, 지역, 낚시 등) 공통점을 발견하면 친한 사이임을 알리고 잠시 시간을 내어 이야기를 나눈다.
    목표는 무엇입니까?
    o 일단 그들이 당신을 그들 중 하나로 받아들인다면 당신은 지금 팀으로서 함께 일하고 있기 때문에 판매에 있어 정말 훌륭한 경험을 할 수 있는 위치에 있는 것입니다. 당신은 더 이상 판매원이 아니라 이제 자문 위치에 있습니다. .
    o 고객이 자신의 세계에 들어가는 것을 허용하거나 허용하지 않을 것임을 기억하십시오. 이것을 이해하고 진심으로 공감하기 위해 노력하면 신뢰를 얻을 수 있습니다. 대부분의 경우, 도중에 이런 일이 발생하면 실제로 그들이 긴장을 푸는 것을 보게 될 것입니다(신체 언어).
    o 이를 설명하기 위해 연설을 하고 마침내 청중과 연결되면 그들이 승인의 의미로 고개를 끄덕일 것이라는 사실을 알아차린 적이 있습니다. 이 모든 것이 진부해 보일 수 있지만 그렇지 않습니다.
    결론적으로, 고객의 신뢰를 얻을 수 있다면 제품이나 서비스를 판매하는 것이 훨씬 쉽고 관련된 모든 사람이 즐거운 경험을 할 수 있습니다.
    Win/Win이 최상의 상황임을 항상 기억하십시오.

최신 C++ 표준은 문자열 작업을 구성하기 위한 함수 및 속성(변수)이 있는 클래스를 정의합니다(클래식 C 언어에는 문자열이 없고 char 배열만 있음).

#포함

#포함

#포함

문자열로 작업하려면 표준 네임스페이스도 포함해야 합니다.

네임스페이스 std 사용

그렇지 않으면 모든 곳에서 string 대신 클래스 설명자 std::string을 지정해야 합니다.

다음은 문자열과 함께 작동하는 프로그램의 예입니다(이전 C 호환 컴파일러에서는 작동하지 않습니다!):

#포함 #포함 #포함 네임스페이스 std 사용 int main() (문자열 s = "테스트"; s.insert(1,"!"); cout<< s.c_str() << endl; string *s2 = new string("Hello"); s2->지우기(s2->end()); 쫓다<< s2->c_str(); cin.get(); 반환 0; )

string 클래스의 주요 기능은 다음과 같습니다.

  • 문자 배열(내장 문자열) 또는 string 유형의 다른 객체로 초기화 기본 제공 유형에는 두 번째 기능이 없습니다.
  • 한 줄을 다른 줄로 복사합니다. 내장 유형의 경우 strcpy() 함수를 사용해야 합니다.
  • 읽기 및 쓰기를 위해 문자열의 개별 문자에 액세스합니다. 내장 배열에서 이것은 인덱스 연산을 사용하거나 포인터를 사용하는 간접 주소 지정을 사용하여 수행됩니다.
  • 같음을 위해 두 문자열을 비교합니다. 내장 유형의 경우 strcmp() 계열의 함수가 사용됩니다.
  • 두 문자열을 연결(연결)하여 결과를 세 번째 문자열로 제공하거나 원래 문자열 중 하나 대신 제공합니다. 내장형의 경우 strcat() 함수를 사용하지만 새 줄에서 결과를 얻으려면 strcpy() 및 strcat() 함수를 순서대로 사용해야 하며 메모리 할당도 처리해야 합니다.
  • 문자열의 길이를 결정하기 위한 내장 수단(클래스 size() 및 l ength()의 멤버 함수). 내장 유형 문자열의 길이를 찾는 유일한 방법은 strlen() 함수로 계산하는 것입니다.
  • 문자열이 비어 있는지 확인하는 기능.

이러한 기본 기능을 자세히 살펴보겠습니다.

문자열 초기화설명할 때와 문자열 길이(종료 null 종결자를 포함하지 않음):

String st("내 문자열\n"); 쫓다<< "Длина " << st << ": " << st.size() << " символов, включая символ новой строки\n";

문자열은 비어 있을 수도 있습니다.

문자열 st2;

여부를 확인하려면 문자열이 비어 있습니까?, 길이를 0과 비교할 수 있습니다.

if (!st.size()) // 비어 있음

또는 빈 문자열에 대해 true를 반환하고 비어 있지 않은 문자열에 대해 false를 반환하는 empty() 메서드를 사용합니다.

if (st.empty()) // 비어 있음

문자열 생성의 세 번째 형식은 문자열 유형의 개체를 동일한 유형의 다른 개체로 초기화합니다.

문자열 st3(st);

문자열 st3은 문자열 st로 초기화됩니다. 우리는 이러한 문자열 일치? 비교 연산자(==)를 사용해 보겠습니다.

If (st == st3) // 초기화 성공

어떻게 한 줄을 다른 줄로 복사? 일반적인 할당 연산자 사용:

st2 = st3; // st3을 st2로 복사

을 위한 문자열 연결더하기 연산자(+) 또는 더하기 할당 연산자(+=)가 사용됩니다. 두 줄이 주어집니다.

문자열 s1("안녕하세요, "); 문자열 s2("세계\n");

처음 두 개의 연결로 구성된 세 번째 문자열을 얻을 수 있습니다.

문자열 s3 = s1 + s2;

s1 끝에 s2를 추가하려면 다음과 같이 작성해야 합니다.

S1 += s2;

추가 작업은 클래스 개체를 연결할 수 있습니다. 그들 사이뿐만 아니라 내장 유형의 문자열과도 마찬가지입니다. 특수 문자와 문장 부호가 내장 유형 char * 로 표시되고 중요한 단어는 클래스 string의 객체로 표시되도록 위의 예를 다시 작성할 수 있습니다.

Const char *pc = ", "; 문자열 s1("안녕하세요"); 문자열 s2("세계"); 문자열 s3 = s1 + pc + s2 + "\n"; 쫓다<< endl << s3;

컴파일러가 내장 유형의 객체를 클래스 string의 객체로 자동 변환하는 방법을 "알기" 때문에 이러한 표현식이 작동합니다. 내장 문자열을 문자열 객체에 간단히 할당하는 것도 가능합니다:

문자열 s1; const char *pc = "문자 배열"; s1=pc; // 오른쪽

역변환은 작동하지 않습니다. 다음 기본 제공 유형 문자열 초기화를 수행하려고 하면 컴파일 오류가 발생합니다.

문자 * str = s1; // 컴파일 오류

이 변환을 수행하려면 c_str()("C string")이라는 멤버 함수를 명시적으로 호출해야 합니다.

Const char *str = s1.c_str();

c_str() 함수는 내장 문자열 유형에서와 같이 문자열 객체의 문자열을 포함하는 문자 배열에 대한 포인터를 반환합니다. 여기서 const 키워드는 포인터를 통해 개체의 내용을 직접 수정하는 현대적인 시각적 환경에서 "위험한" 가능성을 방지합니다.

에게 개별 문자내장 유형과 마찬가지로 string 유형의 객체는 인덱스 작업을 사용하여 액세스할 수 있습니다. 예를 들어 다음은 모든 점을 밑줄로 바꾸는 코드 조각입니다.

문자열 str("www.disney.com"); 정수 크기 = str.size(); (int 나는 = 0; 나는< size; i++) if (str[i] == ".") str[ i ] = "_"; cout << str;

Replace(str.begin(), str.end(), ".", "_");

사실, 여기에 사용된 것은 문자열 클래스의 replace 메서드가 아니라 같은 이름의 알고리즘입니다.

#포함

string 객체는 컨테이너처럼 동작하기 때문에 다른 알고리즘을 적용할 수 있습니다. 이를 통해 문자열 클래스의 기능으로 직접 해결되지 않는 문제를 해결할 수 있습니다.

다음은 문자열 클래스의 주요 연산자 및 기능에 대한 간략한 설명입니다. 표의 링크는 인터넷에서 러시아어 설명으로 연결됩니다. 문자열 클래스의 기능에 대한 전체 목록은 예를 들어 Wikipedia 또는 cplusplus.com을 참조하십시오.

문자열의 문자 지정

연산자 =

문자열에 값을 할당

양수인

문자열에 문자를 할당

개별 문자 액세스

~에

범위를 벗어난 인덱스를 확인하여 지정된 문자 가져오기

운영자

지정된 문자 가져오기

앞쪽

첫 번째 문자 얻기

마지막 문자 얻기

데이터

문자열의 첫 번째 문자에 대한 포인터를 반환

c_str

보고 수정할 수 없는문자열의 문자를 포함하는 C 문자 배열

문자열 용량 확인

비어 있는

문자열이 비어 있는지 확인

크기
길이

문자열의 문자 수를 반환

최대 크기

최대 문자 수를 반환

예약하다

저장 공간을 확보

문자열에 대한 연산

분명한

문자열의 내용을 지웁니다

끼워 넣다

문자 삽입

삭제

문자 제거

푸시백

문자열 끝에 문자 추가

팝백

마지막 문자를 제거

추가

연산자+=

문자열 끝에 문자를 추가합니다.

비교하다

두 문자열을 비교

바꾸다

지정된 문자의 모든 발생을 대체합니다.

하위 문자열

부분 문자열을 반환

복사

문자를 복사

크기 조정

저장된 문자 수 변경

문자열. 라인 입/출력. 포맷된 I/O. 표준 C 언어 기능을 사용한 문자열 처리 메모리 작업.

1.1. 문자열 선언 및 초기화.

문자열은 빈 문자 '\0'으로 끝나는 문자 배열입니다. 문자열은 일반 문자 배열로 선언됩니다. 예를 들면 다음과 같습니다.

문자 s1; // 9자 길이의 문자열

문자*s2; // 문자열 포인터

포인터 s1과 s2의 차이점은 포인터 s1은 명명된 상수이고 포인터 s2는 변수라는 것입니다.

문자열 상수는 작은따옴표로 묶인 문자와 달리 큰따옴표로 묶입니다. 예를 들어,

"이것은 문자열입니다."

문자열 상수의 길이는 표준에 따라 509자를 초과할 수 없습니다. 그러나 많은 구현에서 더 긴 문자열을 허용합니다.

문자열을 초기화할 때 배열의 차원을 지정하지 않는 것이 좋습니다. 컴파일러는 문자열의 길이를 세고 1을 추가하여 이를 수행합니다. 예를 들어,

char s1 = "문자열입니다.";

C 프로그래밍 언어에는 문자열 작업을 위한 많은 함수가 있으며 그 프로토타입은 헤더 파일 stdlib.h 및 string.h에 설명되어 있습니다. 이러한 기능을 사용하는 작업은 다음 단락에서 설명합니다.

1.2. 라인 입/출력.

콘솔에서 문자열을 입력하려면 다음 함수를 사용하십시오.

char* get(char*str);

문자열을 주소 str에 쓰고 입력 문자열의 주소를 반환합니다. 이 함수는 문자 '\n' 또는 EOF(파일 끝)를 만나면 입력을 중지합니다. 개행 문자는 복사되지 않습니다. 널 바이트는 읽기 행의 끝에 배치됩니다. 성공하면 함수는 읽기 라인에 대한 포인터를 반환하고 실패하면 NULL을 반환합니다.

콘솔에 문자열을 출력하려면 표준 함수를 사용하십시오.

int puts (const char *s);

성공하면 음수가 아닌 숫자를 반환하고 실패하면 EOF를 반환합니다.

get 및 puts 함수 프로토타입은 stdio.h 헤더 파일에 설명되어 있습니다.

#포함

printf("입력 문자열: ");

1.3. 포맷된 I/O.

콘솔에서 형식화된 입력의 경우 함수를 사용하십시오.

int scanf(const char *형식, ...);

성공 시 읽은 데이터 단위 수를 반환하고 실패 시 EOF를 반환합니다. 형식 매개변수는 입력 형식 사양이 포함된 형식 문자열을 가리켜야 합니다. 형식 문자열 뒤에 오는 인수의 수 및 유형은 형식 문자열에 지정된 입력 형식의 수 및 유형과 일치해야 합니다. 이 조건이 충족되지 않으면 함수의 결과를 예측할 수 없습니다.

형식 문자열의 공백, "\t" 또는 "\n" 문자는 공백, '\t', '\n', '\v', '\f'. scanf 함수는 입력 스트림에서 null 문자를 건너뜁니다.

% 문자를 제외하고 형식 문자열의 리터럴 문자는 입력 스트림에 정확히 동일한 문자가 표시되어야 합니다. 해당 문자가 없으면 scanf는 입력을 중지합니다. scanf 함수는 리터럴 문자를 건너뜁니다.

일반적으로 입력 형식 사양은 다음과 같습니다.

%[*] [너비] [수정자] 유형

문자 '*'는 이 사양에서 정의한 필드를 입력할 때 공백을 나타냅니다.

- 'width'는 이 사양에 의해 입력되는 최대 문자 수를 정의합니다.

유형은 다음 값을 사용할 수 있습니다.

c는 문자 배열이고,

s – 문자열, 문자열은 빈 문자로 구분되며,

d는 10s/s에서 부호 있는 정수이고,

i는 부호 있는 정수이고, 숫자 체계는 처음 두 자리를 기반으로 합니다.

u는 10초/초 단위의 부호 없는 정수이고,

o는 8초/초 단위의 부호 없는 정수이고,

x, X는 16초/초의 부호 없는 정수,

e, E, f, g, G - 부동 숫자,

p는 포인터에 대한 포인터이고,

n은 정수에 대한 포인터이고,

[…]은(는) 스캔된 문자의 배열입니다(예: .

후자의 경우 대괄호로 묶인 문자만 입력 스트림에서 입력됩니다. 대괄호 안의 첫 번째 문자가 '^'이면 배열에 포함되지 않은 문자만 입력됩니다. 배열의 문자 범위는 '-' 문자를 통해 지정됩니다. 문자를 입력할 때 문자열의 선행 공백 문자와 종료 널 바이트도 입력됩니다.

수정자는 다음 값을 사용할 수 있습니다.

h는 짧은 정수이고,

l, L - 긴 정수 또는 부동 소수점,

정수 또는 부동 소수점에만 사용됩니다.

다음 예는 scanf 함수의 사용 사례를 보여줍니다. 부동 숫자를 입력하기 전에 형식 지정자 앞에 공백이 옵니다.

#포함

printf("정수를 입력하세요 : ");

scanf("%d", &n);

printf("더블 입력: ");

scanf("%lf", &d);

printf("문자를 입력하세요 : ");

scanf("%c", &c);

printf("문자열을 입력하세요 : ");

scanf("%s", &s);

이 프로그램에서는 부동 소수점 숫자가 초기화됩니다. 이것은 컴파일러가 부동 숫자 작업을 지원하는 라이브러리를 포함하기 위해 수행됩니다. 그렇지 않으면 부동 숫자를 입력할 때 런타임에 오류가 발생합니다.

콘솔에 대한 형식화된 출력의 경우 함수를 사용하십시오.

int printf(const char *형식, ...);

성공 시 출력 단위의 수를 반환하고 실패 시 EOF를 반환합니다. 형식 매개변수는 출력 형식 사양을 포함하는 형식 문자열입니다. 형식 문자열 다음에 오는 인수의 수 및 유형은 형식 문자열에 제공된 출력 형식 사양의 수 및 유형과 일치해야 합니다. 일반적으로 출력 형식 사양은 다음과 같습니다.

%[flags] [width] [.precision] [modifiers] 유형

- '플래그'는 출력 형식을 지정하는 다양한 기호입니다.

- 'width'는 이 사양에 의해 출력되는 최소 문자 수를 정의합니다.

- '.precision'은 출력할 최대 문자 수를 정의합니다.

- '수정자'는 인수 유형을 지정합니다.

- '유형'은 인수의 유형을 지정합니다.

다음 출력 형식은 부호 있는 정수를 인쇄하는 데 사용됩니다.

%[-] [+ | 여백] [너비] [l] d

- – 기본적으로 왼쪽 정렬 – 오른쪽 정렬

+ - '+' 기호가 표시됩니다. 음수의 경우 '-' 기호가 항상 표시됩니다.

'공백' – 문자 위치에 공백이 표시됩니다.

d는 데이터 유형 int입니다.

부호 없는 정수를 출력하려면 다음 출력 형식이 사용됩니다.

%[-] [#] [너비] [l]

# - 8 c/c의 숫자의 경우 초기 0을 표시하거나 16 c/c의 숫자의 경우 초기 0x 또는 0X를 표시합니다.

l - 긴 데이터 유형 수정자;

u는 10c/c의 정수이고,

o는 8 c/c의 정수이고,

x, X는 16 c/c의 정수입니다.

부동 소수점 숫자를 표시하기 위해 다음 출력 형식이 사용됩니다.

%[-] [+ | 공백] [너비] [.정밀도]

"정밀도"는 f, e, E 형식의 경우 소수점 이하 자릿수, g 및 G 형식의 경우 유효 자릿수를 나타내며 숫자는 반올림됩니다. 기본값은 6자리의 정밀도입니다.

f는 고정 소수점 수이고,

e는 지수 형식의 숫자이고 지수는 문자 "e"로 표시되며,

E는 지수 형식의 숫자이고 지수는 문자 "E"로 표시되며,

g는 f 또는 g 형식 중 가장 짧고,

G는 f 또는 G 형식 중 가장 짧은 형식입니다.

printf("n = %d\n f = %f\n e = %e\n E = %E\n f = %.2f", -123, 12.34, 12.34, 12.34, 12.34);

// 출력: n = 123 f = 12.340000 e = 1.234000e+001 E = 1.234000E+001 f = 12.34

1.4. 문자열 형식화.

문자열 형식을 지정하도록 설계된 scanf 및 printf 함수의 변형이 있으며 각각 sscanf 및 sprintf라고 합니다.

int sscanf (const char *str, const char *format, ...);

format 매개변수로 지정된 형식 문자열에 따라 str 매개변수로 지정된 문자열에서 데이터를 읽습니다. 성공 시 읽은 데이터의 양을 반환하고 실패 시 EOF를 반환합니다. 예를 들어,

#포함

char str = "a 10 1.2 문자열 입력이 없습니다";

sscanf(str, "%c %d %lf %s", &c, &n, &d, s);

printf("%c\n", c); // 인쇄: a

printf("%d\n", n); // 인쇄: 10

printf("%f\n", d); // 인쇄: 1.200000

printf("%s\n", s); // 출력: 문자열

int sprintf (char *buffer, const char *format, ...);

format 매개변수에 지정된 형식에 따라 문자열을 형식화하고 결과를 버퍼 문자 배열에 씁니다. 이 함수는 종료 널 바이트를 제외하고 버퍼 문자 배열에 쓰여진 문자 수를 반환합니다. 예를 들어,

#포함

문자 str = "c = %c, n = %d, d = %f, s = %s";

char s = "문자열입니다.";

sprintf(버퍼, str, c, n, d, s);

printf("%s\n", 버퍼); // 출력: c = c, n = 10, d = 1.200000, s = 문자열입니다.

1.5. 문자열을 숫자 데이터로 변환합니다.

문자열을 숫자 데이터로 변환하는 함수의 프로토타입은 프로그램에 포함되어야 하는 stdlib.h 헤더 파일에 제공됩니다.

문자열을 정수로 변환하려면 다음 함수를 사용하십시오.

int atoi (const char *str);

문자 *str = "-123";

n = atoi(str); // n = -123

문자열을 긴 정수로 변환하려면 다음 함수를 사용하십시오.

긴 int atol(const char *str);

성공하면 문자열 str이 변환된 정수를 반환하고 실패하면 0을 반환합니다. 예를 들어,

문자 *str = "-123";

n = atol(str); // n = -123

문자열을 double로 변환하려면 다음 함수를 사용하십시오.

이중 atof(const char *str);

성공하면 문자열 str이 변환되는 double 유형의 부동 숫자를 반환하고 실패할 경우 0을 반환합니다. 예를 들어,

char *str = "-123.321";

n = atof(str); // n = -123.321

다음 함수는 atoi, atol, atof와 유사한 작업을 수행하지만 더 많은 기능을 제공합니다.

long int strtol(const char *str, char **endptr, int base);

문자열 str을 long int로 변환하여 반환합니다. 이 함수의 매개변수는 다음과 같은 목적을 가지고 있습니다.

기본 인수가 0이면 변환은 str의 처음 두 문자에 따라 달라집니다.

첫 번째 문자가 1에서 9 사이의 숫자인 경우 숫자는 10 c/c로 표시되는 것으로 간주됩니다.

첫 번째 문자가 숫자 0이고 두 번째 문자가 1에서 7 사이의 숫자인 경우 숫자는 8 c/c로 표현되는 것으로 간주됩니다.

첫 번째 문자가 0이고 두 번째 문자가 'X' 또는 'x'인 경우 숫자는 16 c/c로 표현되는 것으로 가정합니다.

기준 인수가 2에서 36 사이의 숫자인 경우 이 값은 숫자 체계의 기준으로 사용되며 이 체계를 벗어나는 모든 문자는 변환을 중지합니다. 기본 11에서 36까지의 숫자 체계는 'A'에서 'Z'까지 또는 'a'에서 'z'까지 기호를 사용하여 숫자를 나타냅니다.

endptr 인수의 값은 strtol 함수에 의해 설정됩니다. 이 값에는 str의 변환을 중지한 문자에 대한 포인터가 포함됩니다. strtol 함수는 성공하면 변환된 숫자를 반환하고 실패하면 0을 반환합니다. 예를 들어,

n = strtol("12a", &p, 0);

printf("n = %ld, %stop = %c, n, *p); // n = 12, 정지 = a

n = strtol("012b", &p, 0);

printf("n = %ld, %stop = %c, n, *p); // n = 10, 정지 = b

n = strtol("0x12z", &p, 0);

printf("n = %ld, %stop = %c, n, *p); // n = 18, 정지 = z

n = strtol("01117", &p, 0);

printf("n = %ld, %stop = %c, n, *p); // n = 7, 정지 = 7

unsigned long int strtol (const char *str, char **endptr, int base);

strtol 함수와 유사하게 작동하지만 숫자의 문자 표현을 unsigned long int로 변환합니다.

이중 strtod(const char *str, char **endptr);

숫자의 기호 표현을 double로 변환합니다.

이 단락에 나열된 모든 기능은 해당 숫자의 형식에 맞지 않는 첫 번째 문자를 만나면 작동을 멈춥니다.

또한 숫자의 문자 값이 해당 데이터 유형에 대해 허용 가능한 값 범위를 초과하면 atof, strtol, strtoul, strtod 함수는 errno 변수의 값을 ERANGE로 설정합니다. errno 변수와 ERANGE 상수는 math.h 헤더 파일에 정의되어 있습니다. atof 및 strtod 함수는 HUGE_VAL을 반환하고 strtol 함수는 LONG_MAX 또는 LONG_MIN을 반환하고 strtoul 함수는 ULONG_MAX를 반환합니다.

비표준 itoa, ltoa, utoa, ecvt, fcvt 및 gcvt 함수를 사용하여 숫자 데이터를 문자열로 변환할 수 있습니다. 그러나 이러한 목적을 위해 표준 sprintf 함수를 사용하는 것이 좋습니다.

1.6. 문자열 작업을 위한 표준 함수.

이 섹션에서는 string.h 헤더 파일에 프로토타입이 설명되어 있는 문자열 작업을 위한 함수가 고려됩니다.

1. 문자열 비교. strcmp 및 strncmp 함수는 문자열을 비교하는 데 사용됩니다.

int strcmp(const char *str1, const char *str2);

문자열 str1, str2를 사전순으로 비교하고 str1이 str2보다 작거나 같거나 크면 각각 -1, 0 또는 1을 반환합니다.

int strncmp (const char *str1, const char *str2, size_t n);

문자열 str1과 str2에서 최대 처음 n자를 사전식으로 비교합니다. str1의 처음 n개 문자가 str2의 처음 n개보다 작거나 같거나 크면 함수는 각각 -1, 0 또는 1을 반환합니다.

// 문자열 비교 예제

#포함

#포함

char str1 = "아아 bb";

char str2 = "아아아아아";

char str3 = "aa bb cc";

printf("%d\n", strcmp(str1, str3)); // 인쇄: -1

printf("%d\n", strcmp(str1, str1)); // 인쇄: -0

printf("%d\n", strcmp(str1, str2)); // 인쇄: 1

printf("%d\n", strncmp(str1, str3, 5)); // 인쇄: 0

2. 라인 복사. strcpy 및 strncpy 함수는 문자열을 복사하는 데 사용됩니다.

char *strcpy (char *str1, const char *str2);

문자열 str2를 문자열 str1에 복사합니다. 문자열 str2는 종료 널 바이트를 포함하여 전체가 복사됩니다. 함수는 str1에 대한 포인터를 반환합니다. 선이 겹치면 결과를 예측할 수 없습니다.

char *strncpy (char *str1, const char *str2, size_t n);

문자열 str2에서 문자열 str1으로 n개의 문자를 복사합니다. 문자열 str2에 n자 미만이 포함된 경우 마지막 널 바이트는 문자열 str2를 n자로 확장하는 데 필요한 만큼 복사됩니다. 함수는 문자열 str1에 대한 포인터를 반환합니다.

char str2 = "문자열을 복사합니다.";

strcpy(str1, str2);

printf(str1); // 인쇄: 문자열을 복사합니다.

4. 스트링 연결하기. strcat 및 strncat 함수는 문자열을 단일 문자열로 연결하는 데 사용됩니다.

char* strcat (char *str1, const char *str2);

문자열 str1의 종료 널 바이트가 지워진 상태에서 문자열 str2를 문자열 str1에 추가합니다. 함수는 문자열 str1에 대한 포인터를 반환합니다.

char* strncat (char *str1, const char *str2, size_t n);

문자열 str2에서 문자열 str1으로 n개의 문자를 연결하여 str1의 종료 널 바이트를 지웁니다. 함수는 문자열 str1에 대한 포인터를 반환합니다. 문자열 str2의 길이가 n보다 작은 경우 문자열 str2에 포함된 문자만 추가됩니다. 문자열 연결 후 null 바이트는 항상 str1에 추가됩니다. 함수는 문자열 str1에 대한 포인터를 반환합니다.

#포함

#포함

char str1 = "문자열";

char str2 = "연결";

char str3 = "예 아니오";

strcat(str1, str2);

printf("%s\n", str1); // 출력: 문자열 연결

strncat(str1, str3, 3);

printf("%s\n", str1); // 출력: 문자열 연결 예

5. 문자열에서 문자를 검색합니다. strchr, strrchr, strspn, strcspn 및 strpbrk 함수는 문자열에서 문자를 검색하는 데 사용됩니다.

char* strchr (const char *str, int c);

문자열 str에서 매개변수 c로 지정된 문자의 첫 번째 발생을 검색합니다. 성공하면 함수는 발견된 첫 번째 문자에 대한 포인터를 반환하고 실패하면 NULL을 반환합니다.

char* strrchr (const char *str, int c);

문자열 str에서 매개변수 c에 의해 지정된 문자의 마지막 발생을 검색합니다. 성공하면 함수는 마지막으로 찾은 문자에 대한 포인터를 반환하고 실패하면 NULL을 반환합니다.

#포함

#포함

char str = "문자 검색";

printf("%s\n", strchr(str, "r")); // 인쇄: r 검색

printf("%s\n", strrchr(str, "r")); // 출력: rch

size_t strspn(const char *str1, const char *str2);

str2에 없는 str1의 첫 번째 문자 인덱스를 반환합니다.

size_t strcspn(const char *str1, const char *str2);

str2에 있는 str1의 첫 번째 문자 인덱스를 반환합니다.

문자 str = "123 ABC";

printf("n = %d\n", strspn(str, "321"); // 출력: n = 3

printf("n = %d\n", strcspn(str, "cba"); // 출력: n = 4

char* strpbrk (const char *str1, const char *str2);

str2의 문자 중 하나와 동일한 str1의 첫 번째 문자를 찾습니다. 성공하면 함수는 해당 문자에 대한 포인터를 반환하고 실패하면 NULL을 반환합니다.

문자 str = "123 ABC";

printf("%s\n", strpbrk(str, "bca")); // 출력: abc

6. 문자열 비교. strstr 함수는 문자열을 비교하는 데 사용됩니다.

char* strstr (const char *str1, const char *str2);

문자열 str1에서 문자열 str2(후행 null 바이트 제외)의 첫 번째 발생을 찾습니다. 성공하면 함수는 찾은 하위 문자열에 대한 포인터를 반환하고 실패하면 NULL을 반환합니다. str1 포인터가 길이가 0인 문자열을 가리키는 경우 함수는 str1 포인터를 반환합니다.

char str = "123 abc 456;

printf("%s\n", strstr(str, "abc"); // 인쇄: abc 456

7. 문자열을 토큰으로 구문 분석합니다. strtok 함수는 문자열을 토큰으로 구문 분석하는 데 사용됩니다.

char* strtok (char *str1, const char *str2);

문자열 str1의 다음 토큰(단어)에 대한 포인터를 반환합니다. 여기서 토큰 구분 기호는 문자열 str2의 문자입니다. 토큰이 끝나면 함수는 NULL을 반환합니다. strtok 함수에 대한 첫 번째 호출에서 str1 매개변수는 토큰으로 구문 분석되는 문자열을 가리켜야 하며 후속 호출에서 이 매개변수는 NULL로 설정되어야 합니다. 토큰을 찾은 후 strtok 함수는 구분 기호 대신 이 토큰 뒤에 널 바이트를 씁니다.

#포함

#포함

char str = "12 34 ab cd";

p = strtok(str, " ");

printf("%s\n",p); // 열의 값을 인쇄합니다: 12 34 ab cd

p = strtok(NULL, " ");

8. 문자열의 길이 결정. strlen 함수는 문자열의 길이를 결정하는 데 사용됩니다.

size_t strlen(const char *str);

마지막 널 바이트를 무시하고 문자열의 길이를 반환합니다. 예를 들어,

문자 str = "123";

printf("len = %d\n",strlen(str)); // 출력: len = 3

1.7. 메모리 작업을 위한 기능.

헤더 파일 string.h는 또한 메모리 블록 작업을 위한 함수를 설명하며, 이는 문자열 작업을 위한 해당 함수와 유사합니다.

무효* memchr(const 무효 *str, int c, size_t n);

str의 n 바이트에서 c로 지정된 문자의 첫 번째 발생을 검색합니다.

int memcmp(const void *str1, const void *str2, size_t n);

str1과 str2의 처음 n바이트를 비교합니다.

무효* memcpy(const 무효 *str1, const 무효 *str2, size_t n);

문자열 str1에서 문자열 str2로 처음 n바이트를 복사합니다.

무효* memmove(const 무효 *str1, const 무효 *str2, size_t n);

겹치는 문자열이 올바르게 처리되도록 처음 n바이트를 str1에서 str2로 복사합니다.

무효* memset(const 무효 *str, int c, size_t n);

c로 지정된 문자를 str의 처음 n바이트에 복사합니다.