合併字串中連續的多個空格的C程式碼實現
阿新 • • 發佈:2019-02-04
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,請掃描以下二維碼: