字符串算法练习题一

1.实现字符串翻转函数
实现字符串翻转函数。例如,“July”翻转后成为“yluJ”

/*实现字符串的反转*/
void reverseString(char *s,int n){
    int from =0;
    int to = n -1;
    while(from < to){
        int temp = s[from];
        s[from++] = s[to];
        s[to--] = temp;
    }
    return ;
}

2.字符串的定向移动。
给定一个字符串,这个字符串为和26个字母的组合。现在需要把字符串中的好都移动到最左侧,而把字符串中的字母移动到最右侧且保持相对顺序不变,要求时间复杂度和空间复杂度最小。

/*字符串的左右移动*/
void moveString(char *s,int n){
    int j = n - 1,i;
    for( i = n-1 ; i >= 0 ; i--){
        if(s[i] != '*'){
            s[j--] = s[i];
        }
    }
    for(i = 0; i <= j ; i ++){
        s[i] = '*';
    }
    return ;
}

3.字符个数的统计
给定字符串,写一个函数,查找高字符串中每个字符出现的次数,要求区分大小写,且时间复杂度为O(n)

/*统计字符个数*/
void countString(){
    char s[3]= "!aw";
    int m[106]={'0'},i = 0;
    for(i = 0 ; i < strlen(s) ; i++){
        printf("%c %d\n" ,s[i],m[s[i] - ' '] );
        m[s[i] - ' '] += 1;
    }
    for(i = 0 ; i < 106;i++){
        printf("%d : %d\n ",i,m[i]);
    }
    return ;
}

4.字符串的压缩
给定一个字符串,将其中连续出现的空格压缩成1个,将其中以空格分隔的每个字符逆序打印出来。

/*字符串空格的压缩*/
void reverseStr(char *s,int from,int to){
    while(from < to){
        char temp = s[from];
        s[from ++] = s[to];
        s[to --] = temp;
    }
}
void compressSpace(char *s,int n,char *m){
    int temp = 0,i,j = 0,flag = 0;
    for(i = 0; i < n ;i++){
        if(s[i] != ' '){
            m[j] = s[i];
            j++;
            flag = 0;
        }else if(flag == 0){
            reverseStr(m,temp,j-1);
            temp = j +1;
            m[j] = ' ';
            j++;
            flag = 1;
        }else{
            continue;
        }

    }
    m[j] = '\0';
    reverseStr(m,temp,j-1);

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值