【字符串处理算法】将输入字符串中的各个单词反序的算法设计及C代码实现

来源:互联网 发布:除湿袋真的有用吗 知乎 编辑:程序博客网 时间:2024/06/05 00:06

一、需求描述

输入一个字符串,编写程序将该字符串中的各个单词反序拼装并输出。例如,如果输入的字符串是“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”。

 

1 0