【PAT B1009】说反话 (C语言)

世人染于眼前之微渺,所以昧乎未见之大观

第一次有点小错误,是没有考虑只有一个单词输入的情况
第一次:
在这里插入图片描述

#include <stdio.h>

#define MAX_C	80							/* 最大字符串长度 */
/* 得到字符串, 且返回长度 */
int get_str(char s[]){
	int c, i;

	for(i = 0; (c = getchar()) != '\n'; ++i)
		s[i] = c;
	return i;
}
/* 反向输出字符串 */
void print_str(char s[], int lim){
	int i;
	int pos;
	
	pos = lim;									/* 从后向前扫描数组 */
	while(pos > 0){								
		for(i = pos-1; s[i] != ' ' && i > 0; --i);	/* 当还在一个单词里面时,继续前进 */
		pos = i;									
		if(i != 0){									/* 到了一个单词外面 */
			for(++i; i < lim && s[i] != ' '; ++i)	/* 向后扫描输出这个单词 */
				printf("%c",  s[i]);
			printf(" ");
		}else{										/* 到了第一个单词 */
			for(; s[i] != ' '; ++i)
				printf("%c", s[i]);
		}
	}
}
int main(){
	char str[MAX_C] ={0};
	int len;

	len = get_str(str);
	print_str(str, len);
	return 0;
}

第二次:
修改了26行
在这里插入图片描述

#include <stdio.h>

#define MAX_C	80							/* 最大字符串长度 */
/* 得到字符串, 且返回长度 */
int get_str(char s[]){
	int c, i;

	for(i = 0; (c = getchar()) != '\n'; ++i)
		s[i] = c;
	return i;
}
/* 反向输出字符串 */
void print_str(char s[], int lim){
	int i;
	int pos;
	
	pos = lim;									/* 从后向前扫描数组 */
	while(pos > 0){								
		for(i = pos-1; s[i] != ' ' && i > 0; --i);	/* 当还在一个单词里面时,继续前进 */
		pos = i;									
		if(i != 0){									/* 到了一个单词外面 */
			for(++i; i < lim && s[i] != ' '; ++i)	/* 向后扫描输出这个单词 */
				printf("%c",  s[i]);
			printf(" ");
		}else{										/* 到了第一个单词 */
			for(; i < lim && s[i] != ' '; ++i)
				printf("%c", s[i]);
		}
	}
}
int main(){
	char str[MAX_C] ={0};
	int len;

	len = get_str(str);
	print_str(str, len);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值