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