HJ31. 单词倒排
描述
对字符串中的所有单词进行倒排。
说明:
1、构成单词的字符只有26个大写或小写英文字母;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
输入描述
输入一行,表示用来倒排的句子
输出描述
输出句子的倒排结果
示例1
输入:
I am a student
输出:
student a am I
示例2
输入:
$bo*y gi!r#l
输出:
l r gi y bo
C 解法, 执行用时: 1ms, 内存消耗: 256KB, 提交时间: 2020-07-07
#include "stdio.h" int main() { char s[10000] = {0}; char chr = 0; int len = 0; int flag = 0; int end=0,start=0; int first = 0; while (1) { scanf("%c", &chr); if (chr == '\n') break; s[len++] = chr; } for (int i=len;i>0;i--) { if ((s[i-1] >= 'a' && s[i-1] <= 'z') || (s[i-1] >= 'A' && s[i-1] <= 'Z')) // { if (flag == 0) { flag = 1; end = i; } } else { if (flag == 1) { flag = 0; start = i; if (first == 0) first = 1; else printf(" "); for (int j=start;j<end;j++) printf("%c",s[j]); start = 0; end = 0; } } if (i==1 ) { if (end != 0) { printf(" "); for (int j=start;j<end;j++) printf("%c",s[j]); } printf("\n"); } } }
C 解法, 执行用时: 1ms, 内存消耗: 276KB, 提交时间: 2020-12-26
#include <stdio.h> #include <string.h> int main(void){ const int col = 100; char w[col][50]; char *words[col]; int i, top; int ind = 0; for(top = 0; scanf("%s", w + top) == 1; ++top){ char *p = w[top]; while(*p && !isalpha(*p)) ++p; if(!*p) continue; words[ind++] = p; for(; *p; ++p){ if(!isalpha(*p)){ *p = '\0'; if(isalpha(*(p + 1))) words[ind++] = p+1; } } } for(i = ind - 1; i > 0; --i) printf("%s ", words[i]); puts(words[i]); return 0; }