HJ31 单词倒排
描述
对字符串中的所有单词进行倒排。
说明:
1、构成单词的字符只有26个大写或小写英文字母;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
4、每个单词最长20个字母;
数据范围:字符串长度满足 1≤�≤10000 1≤n≤10000
输入描述:
输入一行,表示用来倒排的句子
输出描述:
输出句子的倒排结果
示例1
输入:
I am a student
复制
输出:
student a am I
复制
示例2
输入:
$bo*y gi!r#l
复制
输出:
l r gi y bo
方法一:利用二维数组 将每个单词看为一个元素
#include <stdio.h>
#include <stdlib.h>
int main(){
char str[100][22];
int i=0;
int x;
while(1){
x=scanf("%[a-z|A-Z]",str[i]);
if(getchar()=='\n') break;
if(x) i++;
}
for(int j=i;j>=0;j--){
printf("%s ",str[j]);
}
return 0;
}
方法二:边录取边打印
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main()
{
char s[10000];
gets(s);
int len = strlen(s);
int p1 = len - 1, p2 = len;
while(p1 >= 0)
{
while(p1 >= 0 && !isalpha(s[p1]))
p1--;
p2 = p1;
while(p1 >= 0 && isalpha(s[p1]))
p1--;
for(int i = p1 + 1; i <= p2; i++)
printf("%c", s[i]);
printf(" ");
}
return 0;
}
个人认为这两个方法很棒~