C/코딩 문제

[쉽게 풀어쓴 C언어 Express]Ch.12 문자와 문자열 character and string_Programming12

두부와 백설기 2022. 7. 1. 22:03

Programming11 문제에서 기능추가 문제


12. 사용자에게 영어 이름을 성과 이름으로 나누어서 대문자로 입력하도록 하여서 성과 이름의 위치를 바꾸고 소문자로 변환하여 출력하는 프로그램을 작성하라.

#include<stdio.h>
#include<string.h>
#include<ctype.h>

void str_conversion(char* s, char* s2);

int main(void) {

	char s[100];
	char s2[100] = "";

	printf("성과 이름을 대문자로 입력하시오: ");
	scanf("%[^\n]s", s);

	str_conversion(s, s2);

	printf("%s", s2);

	return 0;

}

void str_conversion(char* s, char* s2)
{
	int i = 0;		// token 변수와 for 문에서 활용할 인덱스 변수
	char* token[100];	// strtok 함수에서 반환된 주소값 저장할 변수

	for (int j = 0; j < strlen(s); j++) {		// 문자열 s 소문자로 변환
		s[j] = tolower(s[j]);
	}

	token[i] = strtok(s, " ");	// 문자열 s에서 첫 번째 공백을 '\0'으로 변환하고 문자열 시작점 주소값 반환

	printf("=================================\n");
	while (token[i] != NULL)	// token[i] 값이 NULL이 아닐 때까지 반복 = strtok(s, " ")가 끝날 때까지
	{
		printf("token[%d] TEST: %s\n", i, token[i]);	// token[i]에 들어간 주소 참조값 출력('\0'이 나올 때까지)
		i++;											// 다음 token[] 요소에 대입하기 위해 i++
		token[i] = strtok(NULL, " ");					// 그전에 변환한 '\0'값 다음 공백을 똑같이 '\0'으로 변환 후 시작점 주소값 반환
	}
	printf("\n=================================\n");

	i--;		// 실제 요소 개수랑 맞게 i--

	for (int j = 0; j <= i; j++) {
		strcat(s2, token[i - j]);		// 반복문으로 s2 변수에 마지막 token의 요소 참조값부터 붙여넣기

		if (j != i) {
			strcat(s2, ", ");			//  마지막 반복전까지 ", " 붙여넣기
		}
	}
}

2022-07-01