| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 413 人关注过本帖
标题:终极字符串题!!我写好了!感觉里面有bug求大家帮帮忙找找了!而且这一题还有 ...
只看楼主 加入收藏
zapjun
Rank: 1
来 自:广西柳州
等 级:新手上路
帖 子:30
专家分:8
注 册:2013-12-25
结帖率:60%
收藏
已结贴  问题点数:10 回复次数:2 
终极字符串题!!我写好了!感觉里面有bug求大家帮帮忙找找了!而且这一题还有其他方法吗?
终极字符串题:字符串替换;测试用例要周密
s1,s2,s3,找到s1中所有s2字符串,并将其替换为字符串s3
s1:"111lkj111lkjaelkj1111111111lkajwelkrj111";
s2:"111";
s3:"22", (“要考虑如下情况22, 222, 2222”);
替换结果:"22lkj22lkjaelkj2222221lkajwelkrj2"
*/
    char s1[100],s2[100],s3[100];
    printf("请输入S1字符串:");
    scanf("%s",s1);
    printf("请输入S2字符串:");
    scanf("%s",s2);   
    printf("请输入S3字符串:");
    scanf("%s",s3);
    int temp=0,c1=0,c2=0,c3=0;//计算出每个字符串的长度.
    while(s1[temp]!='\0')
    {
        c1=temp+1;
        temp++;
    }
    temp=0;
    while(s2[temp]!='\0')
    {
        c2=temp+1;
        temp++;
    }
    temp=0;
    while(s3[temp]!='\0')
    {
        c3=temp+1;
        temp++;
    }
    printf("s1的长度:%d s2的长度:%d s3的长度:%d\n",c1,c2,c3);
    int i=0;
    while(i<c1)
    {
        if(s1[i]==s2[0])
        {
            int j=i,x=0;
            while(j-i<c2)
            {
                if(s2[j-i]==s1[j])
                {
                    x++;
                }
                else
                {
                    x=0;
                    break;
                }
                j++;
            }
            if(x!=0)//如果s1串中找到了s2串的位子开始和s3替换
            {
                if(c3>x)//3中情况:如果要替换的大于c2那么c1要++.
                {
                    int z=0;
                    while(z<c1-i)
                    {
                        s1[c1+(c3-c2)-z]=s1[c1-z];
                        z++;
                    }
                    c1=c1+(c3-c2);
                    j=0;
                    while(j<c3)
                    {
                        s1[i+j]=s3[j];
                        j++;
                    }
                }
                else if(c3<x)//如果要替换的小于c2那么c1要--.
                {
                    int x2=x-c3;
                    c1-=x2;
                    int z=i;
                    while(z<c1)
                    {
                        s1[z+c3-1]=s1[z+c2-1];
                        z++;
                    }
                    j=i;
                    while(j-i<c3)
                    {
                        s1[j]=s3[j-i];
                        j++;
                    }
                }
                else
                {
                    j=i;
                    while(j-i<x)
                    {
                        s1[j]=s3[j-i];
                        j++;
                    }
                }
            }
        }
        i++;
    }
    printf("替换完成s1:%s\n",s1);
搜索更多相关主题的帖子: 字符串 而且 
2014-01-14 16:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:10 
程序代码:
#include <stdio.h>
#include <string.h>

char* replace( const char* s1, const char* s2, const char* s3, char* s4 )
{
    const size_t s2_n = strlen(s2);
    const size_t s3_n = strlen(s3);

    const char* p1 = s1;
    char* p4 = s4;
    for( const char *p2; p2=strstr(p1,s2); p1=p2+s2_n )
    {
        memcpy( p4, p1, p2-p1 ); p4 += p2-p1;
        memcpy( p4, s3, s3_n  ); p4 += s3_n;
    }
    strcpy( p4, p1 );

    return s4;
}

int main()
{
    char buf[100];
    replace( "111lkj111lkjaelkj1111111111lkajwelkrj111", "111", "22", buf );
    printf( "%s\n", buf );

    return 0;
}
2014-01-14 16:43
zapjun
Rank: 1
来 自:广西柳州
等 级:新手上路
帖 子:30
专家分:8
注 册:2013-12-25
收藏
得分:0 
回复 楼主 zapjun
我现在还没有学习指针呢,只会if和while做题,我们老师说先让我们多多练习算法和逻辑,练出了在学习下面的知识,还是谢谢你了。

西游记告诉我既没有后台、也没有师傅!所以老实敲代码!
2014-01-15 10:34
快速回复:终极字符串题!!我写好了!感觉里面有bug求大家帮帮忙找找了!而且这一 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012845 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved