要求:将一个字符串中的非字母字符删除,并将字符串压缩,如字符串12work34hard12处理后为workhard。
算法不能用类似c语言的库函数,如strlen等,也不能开辟新空间,要在原字符串上进行操作。
思路:依次遍历字符串中字符,若为字母字符,就将其复制到原字符数组中,不是字符数组,就跳过。
遍历时用两个指针,一个指针遍历字符串中的所有字符,另一个指针用于在原字符串中按序存储字母字符。
具体代母如下:
/**
* 字符串压缩,将字符串里面的非字母字符删除,并压缩
* @author MWD
* 2013-9-23
*/
#include<stdio.h>
#include<string.h>
char* compress(char* str);
int main(){
char str[] = "12mao12wan12dong12"; //这里不能定义char* 指针直接指向字符串常量,因为指针指向的值不能改变
printf("%s\n",compress(str));
getchar();
return 0;
}
char* compress(char* str){
char *p1,*p2;
p1 = str;
p2 = str;
//基本方法就是依次将字母字符复制到字符串中
while(*p1 != '\0'){
if((*p1 >= 'a' && *p1 <= 'z')||(*p1 >= 'A' && *p1 <= 'Z')){
*p2++ = *p1;
}
p1++;
}
*p2 = '\0';
return str;
}