| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 554 人关注过本帖
标题:请教个字符串复制的问题
只看楼主 加入收藏
lyanoa
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2009-7-16
结帖率:100%
收藏
已结贴  问题点数:40 回复次数:6 
请教个字符串复制的问题
就是把字符串2的n个字符复制到字符串1的后面,如果字符串2的字符数不够n个就在字符串后面补空格。下面是我搞的代码,请大家帮我看看,谢谢!
#include<stdio.h>
#include<ctype.h>
#define SIZE 40
char *copy(char *,char *,int);
int main()
{
   char arr1[2*SIZE+1],arr2[SIZE];
   char *t1=arr1;
   char *t2=arr2;
   int n;
   puts("...");
   while(gets(t1)!='\0'&&gets(t2)!='\0'&&(scanf("%d",&n)==1))
   {
       copy(t1,t2,n);
       puts(t1);
       puts("next?");
       while(getchar()!='\n')
        break;
   }
   return 0;
}
char *copy(char *s,char *ss,int n)
{
     int i=0,j;
     if(strlen(ss)>=n)
      ss[n]='\0';
     else
        for(j=strlen(ss);j<n;j++)
           ss[j]=' ';
        ss[j]='\0';
        while(i<n)
        {
            s[strlen(s)+i]=ss[i];
              i++;
         }
         s[strlen(s)]='\0';
         return s;
}
我试过把2个字符串先赋值,基本上可以实现,就是会多复制第二个字符串的第一个字符,比如 字符串是abcd 字符串2是 ab,最后会搞成abcdaab,不知道为什么
然后我把字符串放到while 里面赋值,问题就更大了,经常只复制第一个字符,或者就是一堆乱码,很无奈。我也试过再加个指针变量,char *t3,t3=copy(...)好像也不行,请大家帮我看下,谢谢了!
搜索更多相关主题的帖子: 字符 
2009-08-01 17:43
lyanoa
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2009-7-16
收藏
得分:0 
我是新手,这是道习题,可能对大家来说问题太幼稚了,不过我真是想了很久,也自己找过这个库函数的定义,不过网上的朋友说库函数的定义是用汇编写的,我也看不懂,所以还是麻烦热心人指点下,谢谢了
2009-08-04 01:56
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:20 
帮你写了个,谨作参考:
程序代码:
#include<stdio.h>
#define N 100

void my_strncat(char *str1,char *str2,int n);

int main(void)
{
    char str1[N];
    char str2[N/2];
    int n;
    
    fgets(str1,N,stdin);
    fgets(str2,N/2,stdin);
    scanf("%d",&n);
    my_strncat(str1,str2,n);
    puts(str1);
    
    return 0;
}

void my_strncat(char *str1,char *str2,int n)
{
    int k=0;
    
    while(*str1!='\n'&&*str1!='\0')
    {
        str1++;
    }
    while(*str2!='\n'&&*str2!='\0'&&k<n)
    {
        ++k;
        *str1++=*str2++;
    }
    while(k<n)
    {
        ++k;
        *str1++=' ';
    }
    *str1='\0';
}
    


[[it] 本帖最后由 广陵绝唱 于 2009-8-4 23:22 编辑 [/it]]
2009-08-04 02:13
soler
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:181
专家分:1077
注 册:2005-7-16
收藏
得分:20 
char *copy(char *s,char *ss,int n)
{
     int i=0,j;
     if(strlen(ss)>=n)
      ss[n]='\0';
     else
        for(j=strlen(ss);j<n;j++)
           ss[j]='^';
        ss[j]='\0';
        s=(char*)(s+strlen(s));
        while(*ss!='\0')
        {
            *s++=*ss++;
         }
         *s='\0';
}
你还不如把你的函数改成这样。。。
也不用返回什么地址了,直接void就ok
2009-08-04 04:12
lyanoa
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2009-7-16
收藏
得分:0 
while(i<n)
        {
            s[strlen(s)+i]=ss[i];
              i++;
         }
         s[strlen(s)]='\0';
         return s;
问题就出在这,每次循环都会算一次长度,谢谢了,我回去好好看下3楼的,太简洁了
2009-08-04 16:02
wdeast
Rank: 2
等 级:论坛游民
帖 子:14
专家分:74
注 册:2009-7-13
收藏
得分:0 
在值不定的情况下,尽量少用FOR语句,
3楼程序好。
2009-08-04 17:01
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
我就喜欢for语句,不喜欢while
2009-08-04 18:27
快速回复:请教个字符串复制的问题
数据加载中...
 
   



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

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