HOWTO · C++

C++에서 문자열과 문자 비교

C++에서 string과 char의 사용과 그 비교에 대한 기사.

이 페이지의 내용

이 간단한 가이드는 C++에서 문자열을 사용하고 이러한 문자열을 다른 리터럴과 비교하는 방법에 관한 것입니다. 계속 진행하기 전에 C++에서 문자열을 간략하게 소개합니다.

C++에서 문자열은 두 가지 방식으로 분류할 수 있습니다.

  1. Character 배열을 만들어 문자열을 구성합니다.
  2. C++에서 표준 String 라이브러리 사용

C++에서 문자형 배열 만들기

C 언어와 마찬가지로 C++도 문자열 리터럴로 사용할 수 있는 문자 배열, 즉 char 배열을 제공합니다. null로 끝나는 문자의 1차원 배열입니다.

따라서 문자열은 char 배열을 형성하고 null 문자로 종료하여 생성됩니다.

집계 방법(예: cout<< charArray)을 사용하여 문자 배열을 인쇄하려면 null 문자가 문자 배열을 종료해야 합니다. C++는 \0NULL 문자로 사용하며 문자열의 끝을 감지하는 집계 메서드를 돕습니다(일부 끝 표시 기호 없이 배열의 끝을 감지하는 것은 불가능합니다).

따라서 아래 예는 “C 언어"에 10개의 문자만 포함되어 있지만 크기 11의 문자 배열을 선언합니다.

char word[11] = {'C', '-', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', '\0'};

초기화 규칙을 따른다면 위의 문장을 다음과 같이 작성할 수도 있습니다.

char word[] = "C-language";

null 문자를 끝에 넣는 것을 잊은 경우 컴파일러는 암시적으로 null 문자를 끝에 배치합니다. 아래의 프로그램을 살펴보자.

#include <iostream>
using namespace std;

int main() {
  char word[11] = {'C', '-', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', '\0'};
  cout << "First message: ";
  cout << word << endl;
  return 0;
}

위 코드 스니펫의 06행은 First Message:를 출력에 제공하는 반면, 07행은 \0이 나타날 때까지 word 변수의 모든 문자를 표시합니다. 따라서 위의 코드 조각은 다음 출력을 생성합니다.

First Message: C-language

C++에서 String 라이브러리 사용

C++에는 표준 라이브러리의 일부로 내장 string.h 헤더 파일이 있습니다. C 스타일 문자열(즉, null 종료 문자열)과 함께 작동하는 기능 번들(예: strcpy, strlen 등)을 제공합니다.

.h 없이 포함된 모든 최신 string 라이브러리는 string.h와 다릅니다. string 클래스 라이브러리는 최신 C++ 문자열을 조작하기 위한 C++ 라이브러리이고 string.h는 C 스타일 문자열(즉, 널 종료 문자열)을 조작하기 위한 C 헤더 파일입니다.

string.h 라이브러리를 이해하기 위해 아래 코드를 살펴보겠습니다.

#include <string.h>

#include <iostream>
using namespace std;

int main() {
  char country[] = "Pakistan";
  char countryTemp[50] = "abc";

  cout << "countryTemp length before initializing is:";
  cout << strlen(countryTemp) << endl;

  // strcpy()
  cout << "Let's copy country to countryTemp" << endl;
  strcpy(countryTemp, country);
  cout << "countryTemp=" << countryTemp << endl;

  cout << "countryTemp length after copying country is:";
  cout << strlen(countryTemp) << endl;

  return 0;
}

위의 프로그램은 먼저 두 개의 문자 배열(C-문자열)을 선언하고 첫 번째 배열을 Pakistan으로 초기화합니다. 10행은 countryTemp의 길이인 3을 출력합니다.

countryTemp의 총 크기는 50바이트이지만 strcpyNULL 문자(배열의 네 번째 바이트에 위치)를 기반으로만 크기를 계산할 수 있습니다. 따라서 strcpy는 3을 반환합니다.

14행은 strcpy 함수를 사용하여 country 배열의 내용을 countryTemp에 복사합니다. 따라서 countryTemp의 새 길이는 8이 됩니다.

출력:

countryTemp length before initializing is:3
Let's copy country to countryTemp
countryTemp=Pakistan
countryTemp length after copying country is:8

참고: NULL 종료 문자열(C 스타일 문자열이라고도 함)에 대해 string.h 헤더 파일에서 제공하는 다양한 기능이 있습니다. 더 많은 사용 가능한 라이브러리 기능은 여기에서 찾을 수 있습니다.

C++에서 Char와 문자열 비교

사람들이 문자열을 문자 상수와 비교하는 것은 일반적인 문제입니다. 이것은 사실상 불가능합니다.

아래 코드를 고려하십시오.

#include <iostream>
using namespace std;

int main() {
  cout << "Do you want to proceed (y or n)?\n";
  char inp;
  cin >> inp;
  if (inp == "y")  // error here
    cout << "Hello again" << endl;
  else
    cout << "Good Bye" << endl;
  return 0;
}

여기 이 함수에서 char 변수인 사용자로부터 입력을 받았고 if 조건에서 큰따옴표로 묶인 문자열 리터럴과 비교합니다. 이 코드는 error: ISO C++ forbids comparison between pointer and integer 오류를 생성합니다.

이 오류를 방지하려면 char 변수 대신 string 변수에 입력하는 것이 좋습니다.

#include <iostream>
#include <string>
using namespace std;

int main() {
  cout << "Do you want to proceed (y or n)?\n";
  string ans;
  cin >> ans;
  if (ans == "y")  // error here
    cout << "Hello again" << endl;
  else
    cout << "Good Bye" << endl;
  return 0;
}

출력:

Do you want to proceed (y or n)?
n
Good Bye