| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 616 人关注过本帖
标题:【急】一个字符串交叉 输出结果相当诡异的问题,救救新手啊
只看楼主 加入收藏
lnos
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-8-2
结帖率:100%
收藏
已结贴  问题点数:2 回复次数:4 
【急】一个字符串交叉 输出结果相当诡异的问题,救救新手啊
我是看到你写的那字符串交叉的,然后我试着改了下,
输入:ABCDEF
回车      
 abcdef
回车
但输出的不是AaBaCcDdEeFf或aAbBcCdDeEfF而是ABCDEFAaBbCcDdEeFf

#include <stdio.h>
int main()
{
    void pross(char *,char *);
    void print(char *);
    char a[200],b[100];
    scanf("%s%s",a,b);
    pross(a,b);
print(a);

}

void pross(char * t,char * f)
{
    char s[200];
    int i=0,j=0;
    for(;*f != 0 || * t !=0 ;f++,t++)
    {
        s[i++]=*t;
        s[i++]=*f;
    }
    //s[i]='\0';
strcpy(t,s);
//*t=*s;  如果换成这句 则输出的是abcdefa,难到不是把S的字符串弄到T吗
}
void print(char * s)
{
    printf("%s",s);
}
搜索更多相关主题的帖子: 字符串 include 
2013-08-11 00:36
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:1 
程序代码:
#include <stdio.h>

void pross(char *,char *);
void print(char *);

int main()
{
    char a[200]={'\0'};
    char b[100]={'\0'};
    scanf("%s%s",a,b);
    pross(a,b);
    print(a);

}

void pross(char *t,char *f)
{
    char s[200]={'\0'};
    char *tmp=t;
    int i=0;
    while(1)
    {
        if (*t!='\0') s[i++]=*(t++);
        if (*f!='\0') s[i++]=*(f++);
        if(*t=='\0' && *f=='\0') break;
    }
    int j=0;
    t=tmp;
    while(s[j]!='\0')
    {
        *t=s[j];
        t++;
        j++;
    }
}
void print(char * s)
{
    printf("%s",s);
} 

DO IT YOURSELF !
2013-08-11 07:44
Rynax
Rank: 1
等 级:新手上路
帖 子:10
专家分:8
注 册:2013-8-8
收藏
得分:1 
问题就出在 for(;*f != 0 || * t !=0 ;f++,t++) 这句上。
因为你把t++了,t是指针呀,最后执行strcpy(t,s); 的时候,你的t已经指向ABCDEF的结尾了,懂了吗?
建议你不要去移动指针,你不是有个i吗,把t++换成t+i试试~
自己改好的程序才有收获哦~
2013-08-11 09:51
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:1 
程序代码:
#include <stdio.h>
#include <string.h>

int main()
{
    void pross(char *,char *);
    void print(char *);
    char a[200],b[100];
    scanf("%s%s",a,b);
    pross(a,b);
    print(a);
   
    return 0;
}

void pross(char * tt,char * f)
{
    char s[200];
    char *t = tt;
    int i=0,j=0;
    for(;*f != 0 && * t !=0 ;f++,t++)
    {
        s[i++]=*t;
        s[i++]=*f;
    }
    while(*f)
    {
        s[i++] = *f;
        f++;
    }
    while(*t)
    {
        s[i++] = *t;
        t ++;
    }
    s[i]='\0';
strcpy(tt,s);
//*t=*s;  如果换成这句 则输出的是abcdefa,难到不是把S的字符串弄到T吗
}
void print(char * s)
{
    printf("%s",s);
} 



没有考虑全,你strcpy的时候传来过的指针因为你的(t++)已经改变,还有没有考虑不完全相同长度的情况


如果确定两个串一样长,这样就可以:
程序代码:
void pross(char * tt,char * f)
{
    char s[200];
    char *t = tt;
    int i=0,j=0;
    for(;*f != 0 && * t !=0 ;f++,t++)
    {
        s[i++]=*t;
        s[i++]=*f;
    }

    s[i]='\0';
    strcpy(tt,s);
}

或者:
程序代码:
void pross(char * t,char * f)
{
    char s[200];
    int i=0,j=0,k = 0;
    for(;*f != 0 && * t !=0 ;f++,k++)
    {
        s[i++]=*(t+k);
        s[i++]=*f;
    }

    s[i]='\0';
    strcpy(t,s);
}




[ 本帖最后由 liufashuai 于 2013-8-11 11:40 编辑 ]

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2013-08-11 11:37
lnos
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-8-2
收藏
得分:0 
非常感谢楼上各位大神相助啊,问题总算解决了.再次感谢
2013-08-11 20:34
快速回复:【急】一个字符串交叉 输出结果相当诡异的问题,救救新手啊
数据加载中...
 
   



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

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