题解 | #单词倒排#
单词倒排
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; }
#刷题#