다 하고 보니 어떻게 돌아가는 코드인지는 알겠지만, 그걸 내가 어떻게 완성 시켰는지는 의문이다.
11. 엔터기가 눌려질 때까지 사용자로부터 문자열을 입력받아서 문자열에 포함된 단어들을 역순으로 배열하여 출력하는 프로그램을 작성하라.
#include<stdio.h>
#include<string.h>
void str_reverse(char* s, char* s2);
int main(void) {
char s[100];
char s2[100] = ""; // '\0'로 초기화, 초기화 안하면 쓰레기값으로 인해 잘 못된 결과로 나옴
printf("문자열을 입력하시오: ");
scanf("%[^\n]s", s);
str_reverse(s, s2);
printf("%s", s2);
return 0;
}
void str_reverse(char* s, char* s2)
{
int i = 0; // token 변수와 for 문에서 활용할 인덱스 변수
char* token[100]; // strtok 함수에서 반환된 주소값 저장할 변수
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-06-30
'C > 코딩 문제' 카테고리의 다른 글
[쉽게 풀어쓴 C언어 Express]Ch.12 문자와 문자열 character and string_Programming12 (0) | 2022.07.01 |
---|---|
[쉽게 풀어쓴 C언어 Express]Ch.10 배열 array_Programming16 (0) | 2022.06.20 |