| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 800 人关注过本帖
标题:关于自己定义的一个strcat 问下,(用数组不用指针的)
只看楼主 加入收藏
NeQhk
Rank: 2
等 级:论坛游民
威 望:1
帖 子:164
专家分:85
注 册:2014-7-19
结帖率:69.23%
收藏
 问题点数:0 回复次数:5 
关于自己定义的一个strcat 问下,(用数组不用指针的)
void str_cat(char str1[],char str2[])
{
    char mid[200];
    int i,j,k;
    for(i=0;str1[i]!='\0';i++)  //从下标0开始赋值
    {
           mid[i]=str1[i];
    }
   
    for(j=i+1,k=0;str2[k]!='\0';j++,k++)//前面赋值到i,现在从i+1开始赋值
    {
        mid[j]=str2[k];
    }
    mid[j+1]='\0';//赋值到j,这里j+1结尾用'\0'
    for(i=0;i<j;i++)
    {
        printf("%s",mid[i]);
    }
}
整个逻辑哪里错了
2015-01-17 14:44
潇湘书生
Rank: 2
等 级:论坛游民
威 望:1
帖 子:23
专家分:89
注 册:2014-12-9
收藏
得分:0 
for(j=i+1,k=0;str2[k]!='\0';j++,k++)//前面赋值到i,现在从i+1开始赋值
    你的i只是参与上面的for循环,并没有记录循环后i的数值,你可以另n=i,然后再j=n+1;
2015-01-17 15:37
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
for(j=i+1,k=0;str2[k]!='\0';j++,k++)//前面赋值到i,现在从i+1开始赋值

上一循环时最后一次i++导致str[i] = '\0'才正常退出循环
所以这个循环的条件应是j = i

再者最好是把两个要cat的数组长度(如len1, len2)加到你自定义的函数的形参中
这样中间数组mid的长度就好确认了 len1 + len2 - 1
而不用声明一个过大数组

还有既然是连接数组 函数最好有返回值
不然就要声明全局变量
而你是在函数中声明的mid
所以char * 比void 更显合理
最后return mid就可以了

Only the Code Tells the Truth             K.I.S.S
2015-01-17 15:41
NeQhk
Rank: 2
等 级:论坛游民
威 望:1
帖 子:164
专家分:85
注 册:2014-7-19
收藏
得分:0 
回复 2楼 潇湘书生
按你说的添了两个变量,n和m
n记录i ,m随n记录i之后再记录j的变化次数,不过运行后直接报错了,

void str_cat(char str1[],char str2[])
{
    char mid[200];
    int i,j,k,n,m;
    for(i=0;str1[i]!='\0';i++)  //从下标0开始赋值
    {
           mid[i]=str1[i];
           n++;
           m++;

    }
   
    for(j=n,k=0;str2[k]!='\0';j++,k++)//前面赋值到i,现在从i+1开始赋值
    {
        mid[j]=str2[k];
        m++;
    }
   
    mid[m+1]='\0';//赋值到j,这里j+1结尾用'\0'
    for(i=0;i<j;i++)
    {
        printf("%s",mid[i]);
    }
}
2015-01-19 17:15
潇湘书生
Rank: 2
等 级:论坛游民
威 望:1
帖 子:23
专家分:89
注 册:2014-12-9
收藏
得分:0 
回复 4楼 NeQhk
你把你的完整程序发出来看看哈,这样方便调试。。。
2015-01-19 22:19
biu_biu_biu
Rank: 2
等 级:论坛游民
帖 子:5
专家分:10
注 册:2015-1-19
收藏
得分:0 
在第一个循环里面 当str1[i]='\0'成立时 这个时候就跳出循环了 所以min[i]并没有赋值 所以在第二个循环里面 j=i就行了 同理在在这个循环中也存在刚才说的问题 还有 在输出数组时 %s表示输出字符串 所以 如果用循环输出的话 %s改成%c   不改%s的话 直接这样写 printf ("%s",min);
2015-01-20 17:22
快速回复:关于自己定义的一个strcat 问下,(用数组不用指针的)
数据加载中...
 
   



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

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