| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 891 人关注过本帖
标题:自己写的strcat函数,有没有谁能帮我优化一下?
只看楼主 加入收藏
youbin2014
Rank: 1
等 级:新手上路
帖 子:45
专家分:6
注 册:2015-5-5
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:6 
自己写的strcat函数,有没有谁能帮我优化一下?
/********************************************************************
编写一个函数,将两个字符串连接起来(不用strcat函数)。
*********************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void mystrcat(char *a,char *b)
{
    int i = 0,j = 0;
    while(a[i] != '\0')
    {
        i++;
    }
    while(b[j] != '\0')
    {
        a[i] = b[j];
        i++;
        j++;
    }
    a[i] = '\0';
}

int main(void)
{
    char a[500];
    char b[500];
    printf("please input string a:");
    gets(a);
    printf("please input shring b:");
    gets(b);

    mystrcat(a,b);

    puts(a);
    return 0;
}
搜索更多相关主题的帖子: include 字符串 
2016-09-23 20:48
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
#include <stdio.h>
 void mystrcat(char *a,char *b)
 {
     int i = 0,j = 0;
     for(;a[i];i++);
     for(;b[j];i++,j++)a[i]=b[j];
     a[i] = '\0';
 }

 int main(void)
 {
     char a[500];
     char b[500];
     printf("please input string a:");
     gets(a);
     printf("please input shring b:");
     gets(b);
     mystrcat(a,b);
     puts(a);
     return 0;
 }
2016-09-23 20:53
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:2 
代码没什么问题,
不足之处:连接的时候有必要检查一下数组a是否能容纳b,如果不能容纳其大小,那么连接就应该停止。

void mystrcat(char *a,char *b)
{
    int i = 0,j = 0;
    while(a[i++]);
    for(i--;b[j]&&i<499;a[i++]=b[j++]);        //这里多了一个判断,就是i不能超过数组的最大上限,之所以是499是因为字符串要保留一个字符给“\0”。
    a[i] = '\0';
}


[此贴子已经被作者于2016-9-23 22:01编辑过]

2016-09-23 21:39
youbin2014
Rank: 1
等 级:新手上路
帖 子:45
专家分:6
注 册:2015-5-5
收藏
得分:0 
回复 2楼 ehszt
比我写的简洁,我以后学习这样的风格。谢谢哈!我会继续努力的。

新手坚持每天写一点短短的代码,也许很幼稚园,但是,坚持总比不写强,高手可以绕道。
2016-09-23 22:37
youbin2014
Rank: 1
等 级:新手上路
帖 子:45
专家分:6
注 册:2015-5-5
收藏
得分:0 
回复 3楼 linlulu001
是的,我没有考虑到这个问题,以后得注意内存溢出这类问题,谢谢大神提醒。

新手坚持每天写一点短短的代码,也许很幼稚园,但是,坚持总比不写强,高手可以绕道。
2016-09-23 22:38
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:2 
C标准库函数strcat还真是直接把第二个字符串贴到第一个字符串的后面的。
既然自己写,我觉得应该是根据传进来的两个字符串大小,重新申请了一块空间,然后把这两段字符串拷贝进去的。
不存在内存溢出,也不会浪费空间(你的代码依赖于char a[MaxSize]MaxSize一开始就得够给力才行,但这很多时候都是在浪费空间,也不可靠)

char* mystrcat(char *a,char *b)
 {
     char *p=(char*)malloc(strlen(a)+strlen(b)+1);
    while(a)*p++=*a++;
    while(b)*p++=*b++;
    *p='\0';
    return p;
 }
//没测试。应该也许可能没错吧。。。

φ(゜▽゜*)♪
2016-09-23 22:51
youbin2014
Rank: 1
等 级:新手上路
帖 子:45
专家分:6
注 册:2015-5-5
收藏
得分:0 
回复 6楼 书生牛犊
考虑的是,我又学到了。

新手坚持每天写一点短短的代码,也许很幼稚园,但是,坚持总比不写强,高手可以绕道。
2016-09-26 23:46
快速回复:自己写的strcat函数,有没有谁能帮我优化一下?
数据加载中...
 
   



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

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