/* * removeTheDuplicateSpace.c * * Created on: 2013-3-17 * Author: ken */ #include<stdio.h> #include<string.h> #define NUL '\0' void deblank( char string[]) { char dst[64]; int i = 0,flag = 0;//控制空格字符是否输出 int dst_index=0; while (string[i] != '\0' ) { if(string[i] !=' ')// 若不是空格 则复制到输出数组dst中,将flag置1 { flag = 1; dst[dst_index++]= string[i]; } else { // 当遇到的字符是空格的时候,将不将这个空格加入到目标数组中,需要判断这个字符的前一个字符是非空字符或者空字符 if(flag)// flag=1 说明前一字符为非空格字符 { dst[dst_index++] =' ';// 复制一个空格字符 flag = 0; } } i++; } dst[dst_index] = '\0';//以'\0'结束字符串 strcpy(string,dst);// 复制 返回string } void deblank( char string[]) { //理解的窍门,虽然用的是同一个数组,但是dst将原来的数组进行了修改 char *dst; dst = string; int i = 0,flag = 0;//控制空格字符是否输出 while (string[i] != '\0' ) { if(string[i] !=' ')// 若不是空格 则复制到输出数组dst中,将flag置1 { flag = 1; *dst++= string[i]; } else { // 当遇到的字符是空格的时候,将不将这个空格加入到目标数组中,需要判断这个字符的前一个字符是非空字符或者空字符 if(flag)// flag=1 说明前一字符为非空格字符 { *dst++ =' ';// 复制一个空格字符 flag = 0; } } i++; } *dst = '\0';//以'\0'结束字符串 } int main() { char str[] = { "I love you!" }; deblank(str); printf("\n%s", str); return 0; }