개발자 데뷔!

[C/C++ 2.5] 문자열 handling 본문

프로그래밍 언어/C++

[C/C++ 2.5] 문자열 handling

물꼮이 2022. 3. 16. 01:27

두 문자열 같은지 비교

//6번
// 다르면 return 하는 함수
int isSame(int a[4], int b[4]) {
	for (int i = 0; i < 4; i++) {
		if (a[i] != b[i])
			return 0;
	}
	return 1;
}
int main() {
	int password[4] = { 3,7,4,9 };
	int input[4];
	for (int i = 0; i < 4; i++) {
		cin >> input[i];
	}
	if (isSame(password, input) == 1)
		cout << "pass";
	else if (isSame(password, input) == 0)
		cout << "fail";
	return 0;
}

 

 

두 문자열 받아서, 이어붙이기(merge 하기)

//12번
int main() {
	char arr[2][6];					//최대 5글자면, null문자 포함 6자리 선언 ! ***주의 **
	char vect[12] = {0};
	int j1 = 0, j2 = 0;
	//입력
	for (int i = 0; i < 2; i++) {
		cin >> arr[i];
	}
	//merge							// 두문자열 merge하는 법 !!! 정리 !!!***
	while (arr[0][j1] != '\0') {
		j1++;
	}
	for (int i = 0; i < j1; i++) {
		vect[i] = arr[0][i];
	}
	while(arr[1][j2] != '\0') {
		j2++;
	}
	for (int i = 0; i < j2; i++) {		//NULL문자 포함하게 = 포함 !
		vect[j1 + i] = arr[1][i];
	}
	//출력
	cout << vect;
	return 0;
}

 

 

 

두 문자열 => 정렬 후, 이어붙이기 

* NULL 을 포함한 문자열을 정렬할 땐, 주의해야 한다. 

- null제외하고 정렬!!! 정리
-  왜냐하면 NULL까지 정렬해버리며 순서 바뀌는데, 

    NULL이 앞으로 오는 순간, 그 뒤의 모든 문자들 없는 취급하기 때문에, 통째로 날아감

//13번
int sort(char arr[6]) {				
	char tmp;
	int idx = 0;
	//반드시 길이 먼저 구해야 함 !!!
	while (arr[idx] != '\0')
		idx++;
	//꼭 길이 기반으로 해야 null안섞이고 편함 !!!
	for (int i = 0; i < idx; i++) {			//이거 6으로 해두면 data다 날아감,,,, 여기선 null제외하고 정렬!!! 정리 **
		for (int j = i + 1; j < idx; j++) {	// 왜냐하면 NULL까지 정렬해버리며 순서 바뀌는데, NULL이 앞으로 오는 순간, 그 뒤의 모든 문자들 없는 취급하기 때문에, 통째로 날아감
			if (arr[i] > arr[j]) {
				tmp = arr[i];
				arr[i] = arr[j];
				arr[j] = tmp;
			}
		}
	}
	return 0;
}
int main() {
	char arr[2][6] = { "DATAW","BBQK" };
	int a,j=0;
	cin >> a;
	if (a % 2 == 1) {
		sort(arr[0]);			//해당 line만 sort
	}
	else {
		sort(arr[1]);
	}
	//출력
	cout<<arr[0]<<endl<<arr[1];	//배열은 한 line씩 출력 !
	//cout << arr;			//이렇게 하면 또 안됨. 16진수로 뜸
	return 0;
}

 

 

 

문자열 중간에 문자 끼워넣기 

//3번
int main() {
	char input[6];				
	int a,idx=0;
	cin >> input >> a;
    
	//길이 찾기
	while (input[idx] != '\0')
		idx++;			//idx = NULL 문자 위치INDEX
        
	// index a 기준 한칸씩 뒤로 땡기기				// 이 로직 정리 !!! **
	for (int i = idx; i > a; i--) {
		input[i] = input[i-1];
	}
    
	input[a] = 'A';
	for (int i = 0; i < idx + 1; i++)
		cout << input[i];
	return 0;
}

 

 

문자열에서 특정 문자 제거하기 

//5번
int main() {				
	char arr[10];
	int index;
	int j;
	cin >> arr;
	cin >> index;

	//문자 땡겨오기
	j = index;
	while (arr[j] != '\0') {	//문자 한칸씩 땡겨오기 !!!! **** 정리
		arr[j] = arr[j + 1];
		j++;
	}
	j = 0;
    
	//출력
	while (arr[j] != '\0') {
		cout << arr[j];
		j++;
	}
	return 0;
}

 

 

문자열 속에서 특정 문자열 찾기 

//7번
int main() {
	int train[8] = { 3,7,6,4,2,9,1,7 };
	int team[3];
	for (int i = 0; i < 3; i++)
		cin >> team[i];
	for (int i = 0; i < 5; i++) {						//  문자열 속에서 문자열 찾기 !!
		if (train[i] == team[0] && train[i + 1] == team[1] && train[i + 2] == team[2])	//세 글자가 모두 같으면 우리팀!
			cout << i << "번~" << i + 2 << "번 칸";
	}
	return 0;
}

 

 

문자열 속에서 특정 문자열 있는지 확인 

//11번
int main() {
	char arr[20];
	int j = 0;
	bool flag = 0;
	cin >> arr;
	while (arr[j] != '\0') {			//문자열 내에 특정 문자열 있는지 확인 하는 로직 !!! ****
		if (arr[j] == 'G' && arr[j + 1] == 'H' && arr[j + 2] == 'O' && arr[j + 3] == 'S' && arr[j + 4] == 'T') {
			flag = 1;
		}
		j++;
	}
	if (flag == 0)
		cout << "존재하지 않음";
	else if (flag == 1)
		cout << "존재";
	return 0;
}

'프로그래밍 언어 > C++' 카테고리의 다른 글

[C/C++ 6.3] STL Vector 2차원  (0) 2022.04.23
[C/C++ 6.2] STL Vector  (0) 2022.03.11
[C/C++ 6.1] STL Sorting  (0) 2022.03.11
[C/C++ 2.4] 문자열 Parsing  (0) 2022.03.10
[C/C++ 2.2] string vs char[] 비교  (0) 2022.03.10