c 语言单词翻转 ,用过xode 完成 具体题目如下
描述输入一个句子(一行),将句子中的每一个单词翻转后输出。输入只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。输出翻转每一个单词后的字符串,单词之间的空格...
描述
输入一个句子(一行),将句子中的每一个单词翻转后输出。
输入
只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。
输出
翻转每一个单词后的字符串,单词之间的空格需与原文一致。
样例输入
hello world
样例输出
olleh dlrow 展开
输入一个句子(一行),将句子中的每一个单词翻转后输出。
输入
只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。
输出
翻转每一个单词后的字符串,单词之间的空格需与原文一致。
样例输入
hello world
样例输出
olleh dlrow 展开
展开全部
#include <stdio.h>
#include <string.h>
//句子最大长度
#define MAX_LEN_OF_SENTENCE 501
//翻转句子中的每一个单词,并且输出
//如果需要保存翻转后的字符串,则再定义一数组,按输出顺序保存字符即可
int reverse_sentence(const char *buff)
{
int index = 0;
char tmp[MAX_LEN_OF_SENTENCE] = {0};
int i =0, j = 0;
//扫描直到字符串结束
while(buff[index] != 0)
{
if(buff[index] == '\n')//如果是换行,结束
break;
//如果不是空格,将单词保存下来
if(buff[index] != ' ')
{
tmp[i] = buff[index];
++i;
}
else
{
//是空格,将单词从后往前输出
//实现翻转
for(j = i - 1; j >= 0; --j)
printf("%c", tmp[j]);
//输出空格,与原文空格数保持一致
printf(" ");
//保存单词的下标和数组归零
i = 0;
memset(tmp, 0, MAX_LEN_OF_SENTENCE);
}
++index;
}
//如果不是以空格结束,输出最后一个单词
for(j = i - 1; j >= 0; --j)
printf("%c", tmp[j]);
printf("\n");
return 0;
}
int main(int argc, char *argv[])
{
char buff[MAX_LEN_OF_SENTENCE] = {0};
printf("Please input a sentence which length is smaller than %d:\n", MAX_LEN_OF_SENTENCE);
//注意这里读取一行字符用的是fgets
//因为scanf("%s", buff) 不能读取空格
//而gets不安全,不推荐使用,所以用fgets读取一行字符,结果是包含\n的
fgets(buff, MAX_LEN_OF_SENTENCE , stdin);
printf("The reversed sentence is:\n");
reverse_sentence(buff);
return 0;
}
测试截图:
简单说下思路:扫描输入的字符串,将单词一个个保存下来,并将单词翻转输出。这里判断单词是否结束,只需要看是不是是空格,如果是空格,说明单词结束,将单词从后往前输出,实现反转,同时输出一个空格,实现题目要求的要和原文空格保持一致。扫描结束之后,如果原文不是空格结束的,则保存单词的数组肯定不是空的,所以,直接将单词翻转输出,由于for循环的结束条件是j>=0,所以,可以达到我们预期的效果。
另外就是输入一行字符,注意用的是fgets,原因代码注释里已经有,编译器是gcc,用其它编译器也可以,比如vc6或更高版本。
2015-07-31
展开全部
代码不过50行~自己撸。
追问
刚学 一个星期,,没思路 帮帮我呗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询