c 语言单词翻转 ,用过xode 完成 具体题目如下

描述输入一个句子(一行),将句子中的每一个单词翻转后输出。输入只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。输出翻转每一个单词后的字符串,单词之间的空格... 描述

输入一个句子(一行),将句子中的每一个单词翻转后输出。

输入
只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。
输出
翻转每一个单词后的字符串,单词之间的空格需与原文一致。
样例输入
hello world

样例输出
olleh dlrow
展开
 我来答
拥云庄主
推荐于2016-05-10 · TA获得超过2505个赞
知道小有建树答主
回答量:672
采纳率:100%
帮助的人:430万
展开全部
#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行~自己撸。
追问
刚学 一个星期,,没思路 帮帮我呗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式