C语言压缩字符串(删除多余空格)
下面的代码将使用两种方法删除字符串中的多余空格,如果两个字符之间的空格数目大于 1,那么只保留一个空格,否则不做处理。
由这个例子可以联想到代码的压缩,删除空格是压缩代码的第一步。
Enter a string [CR to exit]: C语言中网 的 网址 是: http://see.xidian.edu.cn/cpp/
You entered : C语言中网 的 网址 是: http://see.xidian.edu.cn/cpp/
Which is : C语言中网 的 网址 是: http://see.xidian.edu.cn/cpp/
compact1: len=54, C语言中文网 的 网址 是: http://see.xidian.edu.cn/cpp/
compact2: len=54, C语言中文网 的 网址 是: http://see.xidian.edu.cn/cpp/
由这个例子可以联想到代码的压缩,删除空格是压缩代码的第一步。
#include <stdio.h> #define MAXBUFF 128 int getline(char line[], int nmax); int compact1(char line[]); int compact2(char line[]); int main(void) { char buffer1[MAXBUFF]; char buffer2[MAXBUFF]; int len; len = getline(buffer1, MAXBUFF); printf("You entered : %s\n", buffer1); strcpy(buffer2,buffer1); printf("Which is : %s\n", buffer2); len=compact1(buffer1); printf("compact1: len=%d, %s\n",len, buffer1); len=compact2(buffer2); printf("compact2: len=%d, %s\n",len, buffer2); } // 输入一行最大长度为 nmax 的字符串,并返回其长度 int getline(char line[], int nmax) { int len; char c; len = 0; printf("Enter a string [CR to exit]: "); while(((c=getchar())!='\n') && len<nmax-1) line[len++]=c; line[len]='\0'; return len; } // 将多个连续空格替换为一个空格,并返回替换后的字符串的长度 int compact1(char line[]) { int cursor=0; // 即字符数组的当前下标 int prevspace = 0; // 如果上一个位置是字符串则返回true int lcv=0; if(line[cursor]=='\0') return 0; do{ if((line[cursor]==' ')&&prevspace){ // 如果一个空格前面还有一个空格,那么将后面的字符串左移一个位置 for(lcv=cursor;line[lcv];lcv++) line[lcv]=line[lcv+1]; }else prevspace=(line[cursor++]==' '); }while(line[cursor]); return cursor; } // 将多个连续空格替换为一个空格,并返回替换后的字符串的长度 int compact2(char line[]) { int cursor=0; // 字符数组的当前下标 int prevspace = 0; // 如果上一个位置是字符串则返回true int lcv = 0; // 将字符串复制到哪个位置 do{ if(!((line[cursor]==' ')&&prevspace)){ line[lcv++]=line[cursor]; prevspace=(line[cursor]==' '); } }while(line[cursor++]); return(lcv-1); // 遇到 '\0' 返回 -1 }可能的输出结果:
Enter a string [CR to exit]: C语言中网 的 网址 是: http://see.xidian.edu.cn/cpp/
You entered : C语言中网 的 网址 是: http://see.xidian.edu.cn/cpp/
Which is : C语言中网 的 网址 是: http://see.xidian.edu.cn/cpp/
compact1: len=54, C语言中文网 的 网址 是: http://see.xidian.edu.cn/cpp/
compact2: len=54, C语言中文网 的 网址 是: http://see.xidian.edu.cn/cpp/