这道题,是我遇见对数组元素的掌握与使用较为灵活的题目。
下面代码是我刚接触C++,刚学完类的一系列知识,连入门都没过,对C++的强大还未有多大认知,还是极具C语言的风格。
我看过一篇用C++完成的比这个简单多了。
C语言也可以用栈来完成,虽然我有栈的实现函数,但我不愿去搞,就这样吧,实现也是对自己知识点掌握的加深认知。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#include <iostream> #include <cstring> int main( void ) { int a = 0; char ch; char arr1[500001]; //输入数组 char arr2[500001]; //输出数组 while ((ch = getchar ()) != '\n' ) //读入字符串 { arr1[a++] = ch; } arr1[a] = '\0' ; int len = strlen (arr1); int i = 0; int dest = len - 1; //从字符串尾部开始遍历 while (dest >= 0) { if (arr1[dest] == ' ' && arr1[dest + 1] != ' ' && arr1[dest + 1] != '\0' || (dest == 0 && arr1[0] != ' ' )) //元素为单词的条件 { if (i != 0) arr2[i++] = ' ' ; int last = dest + 1; if (dest == 0 && arr1[0] != ' ' ) //满足条件,改变last的值 { last = dest; } while (arr1[last] != ' ' && arr1[last] != '\0' ) //将单词拷贝到输出数组中 { arr2[i++] = arr1[last++]; } } dest--; } arr2[i] = '\0' ; //字符串结束 std::cout << arr2 << std::endl; return 0; } |
尽量理解吧
1
|
arr1[dest] == ' ' && arr1[dest + 1] != ' ' &&arr1[dest+1]!= '\0' |
是为了确定每个单词出现的条件。
1
|
(dest == 0 && arr1[0] != ' ' ) |
是为了处理第一个元素就是单词的情况。
1
2
3
4
|
while (arr1[last] != ' ' && arr1[last] != '\0' ) { arr2[i++] = arr1[last++]; } |
负责将单词拷贝到输出数组上,同时符号要求。
1
2
|
if (i!=0) arr2[i++] = ' ' ; |
这个是,当第一个单词拷贝过去后,判断是否后面还有有单词,且能进这个域,就代表后面还有单词,要加一个空格的元素。
以上就是PTA刷题C语言编程顺序颠倒输出实现的详细内容,更多关于PTA刷题C语言倒序的资料请关注服务器之家其它相关文章!
原文链接:https://blog.csdn.net/weixin_52199109/article/details/117376116