题解 | #单词倒排#

单词倒排

https://www.nowcoder.com/practice/81544a4989df4109b33c2d65037c5836

#include<stdio.h>
#include<string.h>

int main(void)
{
    int i=0;
    int j=0;
    int k=0;//三个都是用于循环
    char arr[10000]={0};//这个数组用于存放输入的字符串
    scanf("%[^\n]%*c",arr);
    //查看实际输入了多少元素
    int sz=strlen(arr);//实际元素的个数
    //题目上面也有提示,每个单词最多20个字母,我们可以试试二维数组,每个单词放在其中一个一维数组里面,连续的空格也放在一起

    //首先为了方便下面的计算,现将所有的分割符换成空格
    for(i=0;i<sz;i++)
    {
        if((arr[i]>='a'&&arr[i]<='z')||(arr[i]>='A'&&arr[i]<='Z'))
        {
            ;
        }
        else
        {
            arr[i]=' ';
        }
    }

    int result[sz][21];//每个单词最高不超过20,按照最大的来设置数组,也就是一个字母算一个单词
    for(i=0;i<sz;i++)//对输入的字符串进行遍历,sz个元素,那就循环sz次
    {
        if(arr[i]==' ')
        {
            result[j][k]=arr[i];
            k++;//当前二维数组j行的第k
            if(arr[i+1]!=' ' || arr[i+1]=='\0')
            {
                result[j][k]='\0';//下一个元素不是空格,就会保存到下一行数组中
                j++;
                k=0;
            }
        }
        else
        {
            result[j][k]=arr[i];
            k++;
            if(arr[i+1]==' ' || arr[i+1]=='\0')
            {
                result[j][k]='\0';
                j++;
                k=0;
            }
        }//最后一个元素在添加到二维数组以后,j还是会+1
    }

    for(i=j-1;i>=0;i--)
    {
        k=0;
        while(result[i][k]!='\0')
        {
            if(result[i][k]!=' ')
            {
                printf("%c",result[i][k]);
                k++;
            }
            else
            {
                k++;
            }
        }

        if(result[i][k-1]!=' '&& i!=0)
        {
            printf(" ");
        }
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务