刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

单词倒排
编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔。
时间限制:10000
内存限制:65536
输入
输入为一个字符串(字符串长度至多为100)。
输出
输出为按要求排序后的字符串。
样例输入

I am a student

样例输出

student a am I

使用微信搜索喵呜刷题,轻松应对考试!

答案:

include <bits/stdc++.h>

void flashback(char a[], int j, int p); //倒序函数

int main(void)

{

char a[10000];

int j, i, k, end;

char temp;

gets(a);

end = strlen(a)-1 ;

for (i = 0; i < end+1; i++) //先处理特殊符号

if (!isalpha(a[i])) //非字母将第一个符号替换为’ ’

{

a[i]=’ ’;

j=0; //j用来记录连续特殊带符号的个数

if(i==0) //如果是首字符 删除他

{

for(k=1;k<=end-1;k++)

a[k]=a[k+1];

a[k]=‘\0’;

}

else k=i+1; //k为特殊符号后的下一字符

while (!isalpha(a[i])&&i<(end+1))

{

i++;

j++;

}

j–;

if(i==(end+1) ) //如果特殊字符结尾,截断字符串

a[k-1]=‘\0’;

else {

for(k=1;k<=end-j;k++) //通过搬移数组去除掉连续的特殊字符

a[k] = a[k + j];

a[k] = ‘\0’;

}

end=strlen(a)-1;

}

flashback(a, 0, end); //句子倒序

for (i = 0; i < end; i++)

if (!isspace(a[i]) && i < end) {

j = i++;

while (!isspace(a[i]) && i < end)

i++;

if (i < end) k = –i;

else k = end;

flashback(a, j, k);

}

puts(a);

}

void flashback(char a[], int j, int p)

{

int i;

char temp;

for (i = j; i < p; i++, p–)

{

temp = a[p];

a[p] = a[i];

a[i] = temp;

}

}

解析:

【喵呜刷题小喵解析】:本题要求将输入的英文字符串中的单词倒序排列。首先,我们需要处理字符串中的特殊字符,将它们替换为空格,并去除连续的特殊字符。然后,我们可以将字符串整体倒序,并再次遍历字符串,将每个单词也倒序。在处理特殊字符时,我们遍历字符串,遇到非字母字符就将其替换为空格,并统计连续非字母字符的个数。如果第一个字符就是非字母字符,我们就将其删除。如果最后一个字符是非字母字符,我们就截断字符串。否则,我们就通过搬移数组去除掉连续的非字母字符。在将字符串整体倒序时,我们定义了一个reverse函数,用于交换字符串中两个位置的字符。在主函数中,我们调用该函数将字符串整体倒序。在将每个单词也倒序时,我们再次遍历字符串,遇到非空格字符就将其后面的空格字符之前的所有字符倒序。这样,我们就得到了倒序排列的字符串。需要注意的是,本题的时间限制和内存限制较宽松,因此我们可以使用C++标准库中的函数来简化代码。例如,我们可以使用cin和cout来读取和输出字符串,使用strlen函数来获取字符串的长度,使用isalpha和isspace函数来判断字符是否为字母或空格,使用swap函数来交换两个位置的字符。这些函数都可以提高代码的可读性和可维护性。
创作类型:
原创

本文链接:单词倒排 编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share