合并字符串中连续的多个空格的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,请扫描以下二维码:
这里写图片描述

目录
相关文章
|
C语言
【Leetcode-1638.统计只差一个字符的字串数目(C语言)】
【Leetcode-1638.统计只差一个字符的字串数目(C语言)】
43 0
|
3月前
|
存储 Java 数据处理
|
3月前
|
Python
【Python】正则表达式判断是否存在连续相同的两个字符,连续两个字符一模一样
Python函数isContinuousChar,使用正则表达式来检测字符串中是否存在连续的相同字母或数字,并返回存在此类字符的列表长度,如果列表长度为0则表示不存在连续相同的字符。
146 2
|
5月前
|
Java
JAVA工具类匹配重复或者连续的字符和符号
JAVA工具类匹配重复或者连续的字符和符号
|
6月前
|
索引 容器
06-数据容器str(字符串)-字符串的下标索引/字符串无法修改/查找字符串下标初始值/字符串的替换/字符串的分割/字符串去除前后空格/统计字符串的数量/字符串的循环遍历/对字符串进行分割
06-数据容器str(字符串)-字符串的下标索引/字符串无法修改/查找字符串下标初始值/字符串的替换/字符串的分割/字符串去除前后空格/统计字符串的数量/字符串的循环遍历/对字符串进行分割
|
6月前
字符串,每个里面包含0-N个数字,如3,8,2,编写函数,将两个这样的字符串合并,并且输出的字符串里面没有重复的数字,并从大到小排列.
字符串,每个里面包含0-N个数字,如3,8,2,编写函数,将两个这样的字符串合并,并且输出的字符串里面没有重复的数字,并从大到小排列.
34 0
题目:下列给定程序中函数fun的功能是:从p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。
题目:下列给定程序中函数fun的功能是:从p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。
|
算法 API
【算法】去除字符串中间的多余空格以及反转字符串的几种方法
【算法】去除字符串中间的多余空格以及反转字符串的几种方法
204 0
C代码:清理一行字串前后的无效字符
C代码:清理一行字串前后的无效字符
89 0
去掉多余的空格---输入一个字符串,字符串中可能包含多个连续的空格,请将多余的空格去掉,只留下一个空格。输入格式
输入一个字符串,字符串中可能包含多个连续的空格,请将多余的空格去掉,只留下一个空格。 输入格式 共一行,包含一个字符串。 输出格式 输出去掉多余空格后的字符串,占一行。 数据范围 输入字符串的长度不超过 200200。 保证输入字符串的开头和结尾没有空格。
322 0