[문제]
프로그램 사용자로부터 문자열을 입력 받아서 입력 받은 문자열의 단어를 역으로 출력하는 프로그램을 작성해보자. 예를 들어서 "I am a boy"가 입력되면, 다음의 출력을 보여야 한다.
"boy a am I"
단, 문자열의 입력에 앞서 프로그램 사용자가 입력할 문자열의 최대길이 정보를 먼저 입력 받기로하자. 그리고 그 길이만큼 메모리 공간을 동적으로 할당해서 문자열을 입력 받기로 하자.
단, "boy a am I"는 printf()만 사용해서 출력하자.
[실행결과]
문자열의 최대 길이 입력: 20
문자열 입력: I am a boy
boy a am I
[수정할 코드]
deleteEnter() 없이 수정 및 코드 정리(간략화)
#include <stdio.h>
#include <stdlib.h>
void deleteEnter(char* str)
{
int i = 0;
while (str[i] != '\n') i++;
str[i] = 0;
}
int main()
{
int maxLen;
int i = 0;
char* inputStr;
printf("문자열의 최대 길이 입력: ");
scanf_s("%d", &maxLen);
getchar();
inputStr = (char*)malloc(sizeof(char) * maxLen);
printf("문자열 입력: ");
fgets(inputStr, maxLen, stdin);
deleteEnter(inputStr);
for (i = strlen(inputStr) - 1; i >= 0; i--) {
if (inputStr[i] == ' ') {
inputStr[i] = 0;
printf("%s", &inputStr[i + 1]);
printf(" ");
}
}
printf("%s", inputStr);
return 0;
}
[코드]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
int maxlen, len, i;
char* str;
printf("문자열의 최대 길이 입력: ");
scanf_s("%d", &maxlen);
getchar(); // \n 문자의 삭제
str = (char*)malloc(sizeof(char) * (maxlen + 1));
printf("문자열 입력: ");
fgets(str, maxlen + 1, stdin); // null문자가 포함되어 있으므로
str[strlen(str) - 1] = 0; // \n 문자의 삭제
len = strlen(str);
for (i = len; i > 0; i--)
{
if (str[i] == ' ')
{
printf("%s ", &str[i + 1]);
str[i] = 0;
}
}
printf("%s", &str[0]);
free(str);
return 0;
}
<참고>
윤성우의 열혈 C 프로그래밍
'프로그래밍 언어 문제 > C' 카테고리의 다른 글
[C언어] 연습문제3 (0) | 2022.05.05 |
---|---|
[C언어] 연습문제4 (0) | 2022.05.05 |
[C언어] 연습문제6 (0) | 2022.04.16 |
[C언어] 연습문제7 (0) | 2022.04.15 |
[C언어] 연습문제8 (0) | 2022.04.13 |