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,请扫描以下二维码: