这道题,是我遇见对数组元素的掌握与使用较为灵活的题目。
下面代码是我刚接触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