您的位置:首页 > 编程语言 > C语言/C++

去除字符串中多余的空格 C语言实现

2012-09-26 22:06 781 查看
比如“hello        world       hey     baby”

变成“hello world hey baby”

思想是设置两个指针,前面的(front)一直往前走直到字符串结尾,后面的(last)复制front当前指向的字符,

当遇到多个空格时并不复制,而是等到front指向非空格字符时在往前走。

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

void omitSpace(char *str){
char *front = str;
char *last = str;
if(str == NULL) return;
while((*front) == ' ') {++front;}            //omit space in the beginning
while((*front) != '\0'){
if((*front) == ' '){
*last = ' ';
while((*front) == ' '){
++front;
}
}else{
*last = *front;                 //can also add one if condition to avoid unnecessary assignment: if(last != front){*last = *front;}
++front;
}
++last;            //front has pointed to the next char, so don't ++front;
}
*last = '\0';

}

int main(){
char *cases[] = {"hello   world!!!", " hello world...", "  Hello  world???", "he   llo wor   ld   ...  "};
char **str;
int strIndex = 0;
int letterIndex = 0;
int casesNum = sizeof(cases) / sizeof(char*);                  //don't forget to be divided by sizeof(char*).
str = (char**)malloc(sizeof(cases));
for(strIndex = 0; strIndex < casesNum; ++strIndex){
str[strIndex] = (char*)malloc(1 + strlen(cases[strIndex]));
for (letterIndex = 0; letterIndex < strlen(cases[strIndex]); ++letterIndex)
{
str[strIndex][letterIndex] = cases[strIndex][letterIndex];
}
str[strIndex][letterIndex] = '\0';
}
for(strIndex = 0; strIndex < casesNum; ++strIndex){
printf("%s\n", str[strIndex]);
omitSpace(str[strIndex]);
printf("%s\n", str[strIndex]);
}
for(strIndex = 0; strIndex < casesNum; ++strIndex){
free(str[strIndex]);
}
free(str);
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  语言 c null