删除字符串中的非字母字符并压缩字符串

要求:将一个字符串中的非字母字符删除,并将字符串压缩,如字符串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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值