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

Muhammad Husnain 2023년12월11일
  1. C++에서 문자형 배열 만들기
  2. C++에서 String 라이브러리 사용
  3. C++에서 Char와 문자열 비교
C++에서 문자열과 문자 비교

이 간단한 가이드는 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
Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

관련 문장 - C++ String