본문 바로가기
STL

1. STL String 클래스를 C언어에서 사용하기

by Best Coding 2023. 3. 13.

이번 글에서는 string 클래스를 C언어에서 사용하는 방법에 대해 알아보려고 합니다. (string 클래스의 기본 사용법은 다른 글에서 제대로 다루도록 하겠습니다 ㅎㅎ)

 

보통 C언어에서 string을 사용하려고 할 때 막히는 부분은 입력, 출력일 것입니다. 왜냐하면 scanf()로 string을 바로 입력받을 수 없고, printf()로 string을 바로 출력 할 수 없기 때문입니다.

 

이 문제점은 char형 배열을 string으로 변환하거나, string을 char형 배열로 변환 할 수 있다면 바로 해결 가능합니다. 

 

1. char형 배열을 string에 복사하기: 그냥 대입연산자 사용하기!!

이 경우 배열의 '\0'문자 전까지가 string에 복사됩니다.

#include<stdio.h>
#include<string>
using namespace std;
char arr[100];

int main(void) {
	scanf("%s", arr);	//Hello
	string temp = arr;	//Hello

	int isSame = 1;
	for (int i = 0; arr[i] != '\0'; i++) {
		if (temp[i] != arr[i]) {
			isSame = 0;	break;
		}
	}
	if (isSame)printf("arr과 temp가 같습니다.\n");
}

 

2. string을 char형 배열에 복사하기: strcpy(배열이름,string변수.c_str()) 함수 사용!!

#include<stdio.h>
#include<string>
using namespace std;
char arr[100];

int main(void) {
	string temp = "Hello";
	strcpy(arr, temp.c_str());
	printf("%s\n", arr);	//Hello
	return 0;
}

 

3. 공백포함된 문자열을 scanf()로 입력받는 경우

C언어에서 scanf로 문자열을 그냥 입력받는 경우 공백 이전까지의 내용만 char형 배열에 저장됩니다. 예를들어 char형 배열에 "Hello world"를 입력받고 string temp에 "Hello world"를 복사하고 싶은데 공백 때문에 Hello"까지만 처리가 될 것입니다. 이 문제는 scanf()에서 공백을 포함해서 입력을 받을 수 있게 설정해주면 해결됩니다. 아래 코드를 참고해주세요.

#include<stdio.h>
#include<string>
using namespace std;
char arr[100];

int main(void) {
	scanf("%[^\n]s", arr);	//Hello World
	string temp = arr;	//Hello World
	
	temp[0] = 'Y';

	strcpy(arr, temp.c_str());

	printf("%s\n", arr);	//Yello World
	
	return 0;
}

댓글