c语言怎么将数的顺序颠倒,c语言输出顺序倒置

首页 > 体育 > 作者:YD1662023-12-30 19:50:38

今天这道题目呢,是我们之前在PAT乙级中遇到的“说反话”题目的进阶版本,当然,标题里也说得很清楚了,这道题就是“说反话-加强版”。

我们先来看看该题的具体要求:

1、给定一句英语,要求将句中所有单词的顺序颠倒打印输出。

2、该字符串长度不超过500000,字符串由若干空格和单词组成,其中单词是由英文单词(大小写有区分)组成的字符串,单词之间用若干个空格分开。

3、打印输出的结果,保证每个单词之间只有一个空格。

c语言怎么将数的顺序颠倒,c语言输出顺序倒置(1)

梳理逻辑

编程题最最重要的就是逻辑,这道题与之前的“说反话”的差别就在于,一方面是对字符串的长度有了一定的要求,另一方面是遇到多个空格时,要把多个空格给省略,在结果打印方面只有一个空格。

1、输入一个字符串,且长度不超过500000,所以要用到字符数组来存储该字符串,且数组内存储的数字为500001,因为数组下标是从0开始的,用scanf函数来进行输入。

2、将输入的英语句子颠倒顺序后输出,那么就需要进行一次倒序遍历,此时倒序遍历最终的值是无法把数组下标为0的数给打印出来,所以我们需要把数组下标为0的数,也就是第一个英语单词给单独存储起来。

同时也是为了防止输入的是空格时,打印导致报错。

而至于如何把中间多余的空格给去掉,我们就需要用到一个计数法了。

以测试用例为例,遇到单词时,我们开始计数,然后遇到空格时,且计数大于0,也就是没有连续的空格时,那么就要跳过空格,打印下一个单词。

如果是整句字符串只有空格的情况下,那就要直接结束打印了。

代码实现

//说反话-加强版 #include<stdio.h> #include<string.h> int main() { char string[500001];//长度要不超过500000,数组下标从0开始 long i = 0; int count = 0;//进行一个计数法来打印空格 scanf("%[^\n]",string);//输入字符串 for(i = strlen(string); i >= 0;i--){ if (string[i] == ' '&&count>0) {//遇到空格,也就是空出来的,但是没有连续的空格 printf("%s", &string[i 1]); if(string[0]!=' '){//第一个字符串不为空 printf(" "); } string[i] = '\0'; count = 0; } else if (string[i] == ' '){//只有空格的状态 string[i] = '\0'; } else if(string[i]!=' '&&string[i]!='\0'){//没有空格且没有结束 count ; } } printf("%s", &string[0]);//打印最开始的字符串 }结果测试

c语言怎么将数的顺序颠倒,c语言输出顺序倒置(2)

c语言怎么将数的顺序颠倒,c语言输出顺序倒置(3)

总结

对于这道题目而言,其实还是有些难度的,我虽然考虑到了计数法,但在实际完成这道题目的时候,梳理这个计数法的逻辑花了不少时间,需要好好反思了。

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.