合并字符串中连续的多个空格的C代码实现

简介: 1.问题描述 将某一字符串中连续出现的多个空格合并为一个空格,如果合并之后的字符串的首尾有空格,则将其去掉。

1.问题描述
将某一字符串中连续出现的多个空格合并为一个空格,如果合并之后的字符串的首尾有空格,则将其去掉。
例如,“ This is a string! ”是一个包含多个空格的字符串,要求其变成“This is a string!”的形式。

2.C代码实现

/**********************************************************************
* 版权所有 (C)2015, Zhou Zhaoxiong。
*
* 文件名称:CombineSpace.c
* 文件标识:无
* 内容摘要:多空格合并
* 其它说明:无
* 当前版本:V1.0
* 作   者:Zhou Zhaoxiong
* 完成日期:20150331
*
**********************************************************************/
#include <stdio.h>
#include <string.h>


// 重定义数据类型
typedef unsigned char UINT8;
typedef unsigned int  UINT32;
typedef signed   int  INT32;

// 函数声明
void CombineSpace(UINT8 *pszOldStr, UINT8 *pszNewStr);
INT32 main();

/**********************************************************************
* 功能描述:主函数
* 输入参数:无
* 输出参数:无
* 返 回 值:无
* 其它说明:无
* 修改日期       版本号        修改人           修改内容
* -------------------------------------------------------------------
* 20150331       V1.0     Zhou Zhaoxiong       创建
***********************************************************************/
INT32 main()
{
       UINT8 szOldStr[100] = {0};
       UINT8 szNewStr[100] = {0};

       // 第一次处理
       memcpy(szOldStr, " Hello,   everyone! ", sizeof(szOldStr)-1);
       CombineSpace(szOldStr, szNewStr);
       printf("The first case: OldStr=%s, NewStr=%s.\n", szOldStr, szNewStr);

       // 第二次处理
       memset(szOldStr, 0x00, sizeof(szOldStr));
       memset(szNewStr, 0x00, sizeof(szNewStr));
       memcpy(szOldStr, " My name   is   ZhouZhaoxiong! ", sizeof(szOldStr)-1);
       CombineSpace(szOldStr, szNewStr);
       printf("The second case: OldStr=%s, NewStr=%s.\n", szOldStr, szNewStr);

       return 0;
}


/**********************************************************************
* 功能描述:合并多个连续空格为一个, 并去掉首位的空格
* 输入参数:pszOldStr-合并空格之前的字符串
* 输出参数:pszNewStr-合并空格之后的字符串
* 返 回 值:无
* 其它说明:无
* 修改日期       版本号        修改人          修改内容
* -------------------------------------------------------------------
* 20150331       V1.0    Zhou Zhaoxiong       创建
***********************************************************************/
void CombineSpace(UINT8 *pszOldStr, UINT8 *pszNewStr)
{
    UINT32 iOldIndex        = 0;
    UINT32 iNewIndex        = 0;
    UINT8  chSingleChar     = '\0';
    UINT8  iIsSpace         = 0;
    UINT8  szTmpNewStr[100] = {0};

    if ((NULL == pszOldStr) || (NULL == pszNewStr))
    {
        printf("CombineSpace: input parameter(s) is NULL!");
        return;
    }

    while ('\0' != (chSingleChar = pszOldStr[iOldIndex++]))
    {
        if (chSingleChar == ' ')   // 多个连续空格只保留一个
        {
            if (iIsSpace == 0)
            {
                iIsSpace = 1;
                szTmpNewStr[iNewIndex++] = chSingleChar;
            }
        }
        else
        {
            iIsSpace = 0;
            szTmpNewStr[iNewIndex++] = chSingleChar;
        }
    }

    // 如果最后一个字符是空格, 则将其去掉
    if (szTmpNewStr[strlen(szTmpNewStr)-1] == ' ')
    {
        szTmpNewStr[strlen(szTmpNewStr)-1] = '\0';
    }

    // 如果第一个字符是空格, 则将其去掉
    if (szTmpNewStr[0] == ' ')
    {
        memcpy(pszNewStr, szTmpNewStr+1, strlen(szTmpNewStr)-1);
    }
    else
    {
        memcpy(pszNewStr, szTmpNewStr, strlen(szTmpNewStr));
    }

    return;
}

3.程序运行结果
在Linux下执行“gcc -g -o CombineSpace CombineSpace.c”之后,再执行“CombineSpace”命令,其结果如下:

The first case: OldStr= Hello,   everyone! , NewStr=Hello, everyone!.
The second case: OldStr= My name   is   ZhouZhaoxiong! , NewStr=My name is ZhouZhaoxiong!.

本人微信公众号:zhouzxi,请扫描以下二维码:
这里写图片描述

目录
相关文章
|
5月前
|
Python
【Python】正则表达式判断是否存在连续相同的两个字符,连续两个字符一模一样
Python函数isContinuousChar,使用正则表达式来检测字符串中是否存在连续的相同字母或数字,并返回存在此类字符的列表长度,如果列表长度为0则表示不存在连续相同的字符。
190 2
|
7月前
|
Java
JAVA工具类匹配重复或者连续的字符和符号
JAVA工具类匹配重复或者连续的字符和符号
|
8月前
|
C语言 C++
C语言利用ASCII码表统计字符串每个字符出现的次数
C语言利用ASCII码表统计字符串每个字符出现的次数
109 0
|
8月前
字符串,每个里面包含0-N个数字,如3,8,2,编写函数,将两个这样的字符串合并,并且输出的字符串里面没有重复的数字,并从大到小排列.
字符串,每个里面包含0-N个数字,如3,8,2,编写函数,将两个这样的字符串合并,并且输出的字符串里面没有重复的数字,并从大到小排列.
42 0
题目:下列给定程序中函数fun的功能是:从p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。
题目:下列给定程序中函数fun的功能是:从p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。
116 0
|
算法 API
【算法】去除字符串中间的多余空格以及反转字符串的几种方法
【算法】去除字符串中间的多余空格以及反转字符串的几种方法
230 0
1. 实现含有中文字符的字符串逆转,如: “我是小萌新” 转换成“新萌小是我”(指针项目练习1)
1. 实现含有中文字符的字符串逆转,如: “我是小萌新” 转换成“新萌小是我”(指针项目练习1)
|
算法 Java C语言
C语言---递归反向输出任意长度的字符串
C语言---递归反向输出任意长度的字符串
230 0
C语言---递归反向输出任意长度的字符串
将若干字符串按字母顺序(由小到大)输出(用指针)
将若干字符串按字母顺序(由小到大)输出(用指针)
409 0
|
C#
C# 将字符串中的多个连续空格变成一个
C# 将字符串中的多个连续空格变成一个
375 0