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

一、需求描述

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

时间: 2024-08-06 03:46:17

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

对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形。首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把着个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。比如"Hello World"变形后就变成了"wORLD hELLO"。

import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List; public class Transform { private String upperAndLower(String s){ StringBuilder sb=new StringBuilder(); for(int i=0,len=s.length();i<len;i++){ char

scanf函数输入字符串详解

除了在定义字符数组时初始化外,还可以通过scanf从键盘输入字符串.下面写一个程序: 1 #include <stdio.h> 2 #include <stdlib.h> 3 int main(void) 4 { 5 char str[10];//str是string的缩写,即字符串 6 printf("请输入字符串:"); 7 scanf("%s",str);//输入参数是已经定义好的"字符数组名",不用加&,因

字符串反序输出字符串

Console.Write("请输入一个字符串:"); string str = Console.ReadLine(); string reverse = "";//用于存放反序后的字符串 for (int i = str.Length - 1; i >= 0; i--) { reverse += str[i]; } Console.WriteLine(reverse+":串符字个一入输请"); Console.ReadLine();

JAVA-从题目看算法,将输入字符串进行排序并输出

来看一个排列的例子,它所做的工作是将输入的一个字符串中的所有元素进行排序并输出,例如:你给出的参数是"abc" 则程序会输出:abc acb bac bca cab cba 这是一个典型的可用递归算法来实现的例子,我们来看一下利用递归的2种不同解法. 1.典型递归元素交换的算法 (1)算法的出口在于:low=high也就是现在给出的排列元素只有一个时. (2)算法的逼近过程:先确定排列的第一位元素,也就是循环中i所代表的元素. package test; import java.uti

查找输入字符串中出现字符次数最多的那个字和重复次数

public class chongfu { //找出字符串中重复次数最多的那个字符: /** * public static void main(String[] args){ System.out.println("请输入字符串"); Scanner a = new Scanner(System.in); String b=a.nextLine(); int count=0; int d=0; char t = 0; for(int i=0;i<b.length();i++)

【C】字符串的输入,求输入字符串中最长的单词

首先,基本目标很简单,就是利用C语言:编写一个函数,输入一行字符,将此行字符中的最长的单词输出. 代码如下: #include<stdio.h> void input(char s[]){ int i=0; for(int c;(c=getchar())!='\n';i++){ s[i]=c; } s[i]='\0';//读取完成,记得对这个字符数组封口 } char* findmax(char s[]){ int max=0,word_length=0,p=0,i=0;//这个p是用来记录最

C语言实现--&gt;&gt;对输入字符串中各类型出现次数的统计

问题描述: 编写一个程序统计输入字符串中:各个数字.空白字符.以及其他所有字符出现的次数. 代码实现: #include <stdio.h> #include <ctype.h> int main() {  int other=0;  int space=0;  int a[10]={0};  int i=0;  int ch=0;  while ((ch=getchar())!=EOF)  {   /*    //isspace库函数---判断输入字符ch是不是空,如果是,if条

(练手备忘)汇编实现将输入的字符串中的空格去掉后反序输出

功能:任意输入一个字符串,去掉其中的空格后反序输出 注:使用 int 21h 里的 0AH 功能 输入一个字符串时,字符串的第一个字节存储的是字符串的最大长度,第二个字节存储的是实际读入字符的个数 编译器使用的是MASMPlus ;#Mode = DOS MAXLEN = 64 ;设置字符串的最大长度 SPACE = ' ' ;空格 datasg segment buffer db MAXLEN+1,0,MAXLEN+1 dup(0) ;字符串输入缓冲区 string db MAXLEN+3 d

输入字符串取出字符串中的连续数字放入单独数组

public class ShowsNum { public Map getNums(String str){ HashMap<Integer,String> map=new HashMap<Integer,String>(); char [] chnum=str.toCharArray(); StringBuffer strbuffer=new StringBuffer(); int des=1; for(int i=0;i<chnum.length;i++){ //当前字