본문 바로가기

프로그래밍 언어 문제/C

[C언어] 연습문제5

[문제]

프로그램 사용자로부터 문자열을 입력 받아서 입력 받은 문자열의 단어를 역으로 출력하는 프로그램을 작성해보자. 예를 들어서 "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