标题:字符串的交叉合并
只看楼主
程火山
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2017-5-3
结帖率:25%
已结贴  问题点数:20 回复次数:8 
字符串的交叉合并
想实现 string1 123456789
       string2 abcde
   合并后 string1 1a2b3c4d5e6789
代码如下
 #include <stdio.h>
#include <string.h>

#define N 128

void conj(char *string1, char *string2);

int main(void)
{
    char str1[N * 2], str2[N];

    printf("Please input string1:");
    gets(str1);
    printf("Please input string2:");
    gets(str2);
    conj(str1,str2);
    printf("\nstring1:%s\n", str1);

    return 0;
}
void conj(char *string1, char *string2)
{
    int i=0,j=1,k=1;
    int l1=strlen(string1),l2=strlen(string2);
    char *str=string1;
    *str=*string1;
    *(str+1)=*string2;
    for(i=2; i<=l1+l2; i++)
    {
        if(i%2!=0 && *(string2+j)!='\0')  //不是偶数且字符串2不结束
        {
            *(str+i)=*(string2+j);
            j++;
        }
         else
        {
            *(str+i)=*(string1+k);
            k++;
        }
    }
    *(str+i)='\0';
    i=0;
    for(i=0;*(str+i)!='\0';i++)
    {
        *(string1+i)=*(str+i);
    }

}

为啥结果是这样的???
搜索更多相关主题的帖子: include return 字符串 
2017-05-04 09:34
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:7 
在合并的时候最好新建一个数组,把两个字符串轮流拷进去,最后再统一拷到字符串1中。
你这样写已经把字符串1修改了,后面再合并就不对了。
2017-05-04 09:45
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:7 
#include <stdio.h>

char *_conj(char *s, char *s1, char *s2)
{
    char *p=s;
    for (;*s1 && *s2; ++s1,++s2,p+=2)
    {
        *p = *s1;
        *(p+1) = *s2;
    }
    for (;*s1; ++s1,++p)
        *p = *s1;
    for (;*s2; ++s2,++p)
        *p = *s2;
    *p = 0;
    return s;
}

main()
{
    char s[256];
    printf("%s\n", _conj(s,"123456789","abcde"));
    printf("%s\n", _conj(s,"abcde","123456789"));
}

[此贴子已经被作者于2017-5-4 10:06编辑过]

2017-05-04 09:56
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:7 
#include<stdio.h>
void Combine(char*des,char*f1,char*f2)
{
    int tag=1;int s1=0,s2=0,i=0;
    for(s1=0,s2=0,i=0;s1<strlen(f1)||s2<strlen(f2);)
    {
        if(s1<strlen(f1)&&s2<strlen(f2))
            tag=!tag;
        else
            tag=(s1<strlen(f1))?0:1;
        if(!tag)
            des[i++]=f1[s1++];
        else
            des[i++]=f2[s2++];
    }
    des[i]='\0';
}
int main()
{
    char str1[]="abcdef",str2[]="123",str3[10];
    Combine(str3,str1,str2);
    printf("%s",str3);
    return 0;
}
2017-05-04 12:17
程火山
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2017-5-3
得分:0 
回复 2楼 grmmylbs
可是我的string1 没有改变!就是string 1 和string 2 轮流放在strl里的牙!!就是这里不懂??
2017-05-04 14:31
程火山
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2017-5-3
得分:0 
回复 4楼 yangfrancis
谢谢呀!!代码很简洁!!学习起来!!
2017-05-04 14:36
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:0 
    *str=*string1;    //str指向了string1
     *(str+1)=*string2;//string1的第二位被改了,但是数字却没有往后移位
2017-05-04 14:38
程火山
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2017-5-3
得分:0 
回复 7楼 grmmylbs
*(str+1)=*string2;//string1的第二位被改了,但是数字却没有往后移位

可是我这里是改变的str呀!!没有改变string1的!!
2017-05-04 14:53
程火山
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2017-5-3
得分:0 
谢谢大家!!理清了!
2017-05-04 15:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-476680-1-1.html




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

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