1. 程式人生 > >合併字串中連續的多個空格的C程式碼實現

合併字串中連續的多個空格的C程式碼實現

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,請掃描以下二維碼:
這裡寫圖片描述