将单词颠倒I am great ->great am I
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
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;
}
个人认为这两个方法很棒~