题解 | #单词倒排#

单词倒排

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

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

int main(void)
{
    char rev[21];
    char str[10001];
    char ctos[2];
    char* p;

    ctos[1] = '\0';//字符转字符串数组
    int len = 0;
    int lenstr = 0; 
    while(scanf("%s",rev) != EOF)
    {
        len = strlen(rev);         
        for(int i=0;i<len;i++)
        {
            if(((rev[i]>='a')&&(rev[i]<='z'))||( (rev[i]>='A')&&(rev[i]<='Z') ))
            {
                ctos[0] = rev[i];//便于使用strcat函数
                strcat(str,(const char*)ctos);//将符合的英文字母字符贴合到str数组中
            }
            else//若为非英文字符,则视为分隔符(空格)
            {
                rev[i] = ' ';
                ctos[0] = rev[i];
                strcat(str,(const char*)ctos);
            }
        }
        ctos[0] = ' ';//每个单词后添加一个空格
        strcat(str,(const char*)ctos);
    }
    
    lenstr = strlen(str);//计算处理好的数组长度
    for(int i=lenstr-2;i>=0;i--)//根据题目要求输出顺序,从后往前输出,因为按照上述处理规则,最后一位必是空格,所以从lenstr-2开始
    {
        if(str[i]==' ')//如果又遇到空格,则说明遍历了一个字符串
        {
            p = &str[i+1];//将空格后的字符串赋值给指针p进行输出
            printf("%s",p);
            str[i+1] = '\0';//同时将此字符串的首位赋值成字符串结束符号
        }
        
    }
    printf("%s",str);//因为第一个遍历不到分隔符(空格),所以单独输出

	return 0;
}

#刷题#
全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

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