一、需求描述
输入一个字符串,编写程序将该字符串中的各个单词反序拼装并输出。例如,如果输入的字符串是“Hello, how do you do”,那么输出的字符串为“do you do how Hello,”。注意保留各个单词之间的空格及相应的标点符号。
二、算法设计
通过观察示例字符串(即“Hello, how do you do”),我们可以看到该字符串中各个单词与空格之间的关系为:单词总数=空格总数+1。也就是说,示例字符串中的空格总数为4,单词个数为5(即“Hello,”、“how”、“do”、“you”、“do”)。
因此,我们可以考虑先找出输入字符串中的空格总数,再根据空格找出各个单词,然后将这些单词反序拼装起来。
程序的总体流程如图1所示。
图1 程序的总体流程
三、特殊流程考虑
在编写程序的过程中,我们要对输入字符串的格式多做考虑,如:
1.输入字符串的开头几个字符为空格,即形如“ Hello,how do you do”,我们需要先将开头的几个空格去掉,再进行后续处理。
2.输入字符串的结尾几个字符为空格,即形如“Hello, how do you do ”,我们需要先将结尾的几个空格去掉,再进行后续处理。
3.输入字符串的中间几个字符为连续的空格,即形如“Hello, how do youdo”,我们需要先将连续的空格合并为一个空格,再进行后续处理。
4.只要输入字符串中的两个单词之间出现了空格,我们都把它们当作两个不同的单词,即使这两个单词没有实际的意思,即形如“Hello, how do y ou do”,其中的“y”和“ou”虽然要合并在一起才有意义,但我们仍然按照两个不同的单词进行处理。
四、程序代码
五、程序测试
我们将编写好的程序“ReverseTheString.c”上传到Linux机器,并使用“gcc -g -o ReverseTheStringReverseTheString.c”命令对该程序进行编译,生成“ReverseTheString”文件。下面对程序进行详细的测试。
1.输入字符串为“Hello, how do you do”时,程序运行情况如下:
Please input the string:
Hello, how do you do
TestStr=Hello, how do you do
ResultStr=do you do how Hello,
2.输入字符串为“ Hello, how do you do”(注意,前面有两个空格)时,程序运行情况如下:
Please input the string:
Hello, how do you do
TestStr= Hello, how doyou do
ResultStr=do you do how Hello,
3.输入字符串为“Hello, how do you do ”(注意,后面有两个空格)时,程序运行情况如下:
Please input the string:
Hello, how do you do
TestStr=Hello, how do you do
ResultStr=do you do how Hello,
4.输入字符串为“Hello, how do you do”(注意,中间有连续的空格)时,程序运行情况如下:
Please input the string:
Hello, how do you do
TestStr=Hello, howdo you do
ResultStr=do you do how Hello,
5.输入字符串为“Hello, ho w do yo u do”(注意,将几个完整的单词用空格分开)时,程序运行情况如下:
Please input the string:
Hello, ho w do yo u do
TestStr=Hello, ho w do yo u do
ResultStr=do u yo do w ho Hello,
可见,对于上面考虑到的几种特殊情况,程序均能做出正确的处理。
六、需求扩展
基于本文中的需求和程序,我们可考虑对需求进行以下扩展:
1.将反序之后的字符串的首字母大小,并将反序之前的首字母从大写变为小写,即将“Hello, how do you do”转换为“Do you do how hello,”。
2.不改变原字符串中的最后的标点符号的位置,即将“Hello, how do you do!”转换为“do you do how Hello,!”。
3.将原字符串中的标点符号去掉,即将“Hello, how do you do!”转换为“do you do how Hello”。
【字符串处理算法】将输入字符串中的各个单词反序的算法设计及C代码实现
原文:http://blog.csdn.net/zhouzhaoxiong1227/article/details/50669899