题解 | #句子逆序#

句子逆序

https://www.nowcoder.com/practice/48b3cb4e3c694d9da5526e6255bb73c3

复杂代码版解题思路

0

1

2

3

4

5

6

7

8

9

I

a

m

a

b

o

y

利用for循环逆序遍历,遇到空格‘ ’就输出空格右侧的单词

以I am a boy举例

第一个for循环逆序遍历

y→o→b→空格

遇到空格以后进入if

此时flag为4,S_num为9,num为9,i在6的位置

将j置于6的位置,使用第二层for循环输出

利用if跳过空格,然后输出7-S_num的单词

输出完后将S_num和num改为总长减flag的长度也就是5,flag为0

最后输出空格

第一个for循环继续逆序

a→空格

遇到空格以后进入if

此时flag为2,S_num和num是5,i在1的位置

将j置于4的位置,使用第二层for循环输出

利用if跳过4位置的空格,然后输出5-S_num位置的单词

输出完后将S_num和num改为总长减flag的长度也就是3,flag为0

最后输出空格

第一个for循环继续逆序

n→a→空格

遇到空格以后进入if

此时flag为3,S_num和num是3,i在1的位置

将j置于1的位置,使用第二层for循环输出

利用if跳过1位置的空格,然后输出2-S_num位置的单词

输出完后将S_num和num改为总长减flag的长度也就是1,flag为0

最后输出空格

第一层for循环结束,i为-1,此时第一个单词还没有输出

最后使用一个for循环输出第一个单词到空格结束就完成了

#include <stdio.h>
int main() {
    int flag=0,i=0,num=0,j=0,S_num=0;
    char arry[1000]={'\0'};
    while(scanf("%c",&arry[i])!=EOF)
    {
        if (arry[i]=='\n')
        {
            break;
        }
        if(arry[i]==' ')//判断字符串有没有空格,如果没有空格就不用逆序输出
        {
            flag=1;
        }
        i++;
    }
    num=i-1;
    S_num=num;
    if(flag!=1)//没有空格直接正序输出
    {
        for(i=0;i<=num;i++)
        {
            printf("%c",arry[i]);
        }
    }
    else {
        flag=0;
        for(i=i-1;i>=0;i--)//逆序
        {
            if(arry[i]==' ')
            {
                for(j=num-flag+1;j<=S_num;j++)//S_num记录的是字符串的长度
                {
                    if(arry[j]==' ')//将空格跳过不输出
                    {

                    }
                    else
					{
                        printf("%c",arry[j]);
                    }
                }
                num=num-flag;//字符串长度减已经打印的字符的长度
                S_num=num;
                flag=0;
                printf(" ");//打印空格
            }
            flag++;//用于记录移动到空格所走的步数
        }
	  /*打印第一个空格前的单词*/
        if(i==-1)//因为for循环出来以后i=-1
        {
            for(i=0;arry[i]!=' ';i++)
            {
                printf("%c",arry[i]);
            }
        }
    }
    return 0;
}

全部评论

相关推荐

挣K存W养DOG:他真的很中意你,为什么不回他
点赞 评论 收藏
分享
10-07 23:57
已编辑
电子科技大学 Java
八街九陌:博士?客户端?开发?啊?
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务