| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1050 人关注过本帖
标题:一个字符串处理问题
只看楼主 加入收藏
sd791002
Rank: 2
等 级:论坛游民
帖 子:88
专家分:87
注 册:2010-4-3
收藏
得分:0 
回复 9楼 voidx
是啊是啊 我忘记了原来就有啊 然后现在再改改-
2011-04-08 18:43
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 11楼 sd791002
建议你还是不要改用 <string.h> 了,就当练习,自己写写字符串处理函数呗
2011-04-08 18:47
sd791002
Rank: 2
等 级:论坛游民
帖 子:88
专家分:87
注 册:2010-4-3
收藏
得分:0 
#include<stdio.h>

void main()
{
    int n,m;
    char string1[50],string2[50],*p;
    p=string1;
    int length(char *p);
   
    printf("please input string1:");
    gets(string1);
    n=length(string1);
       printf("输入的字符串是:%s\n长度是:%d\n接下来输入m=",string1,n);


   void comp(int m,char string1[],char string2[]);

    scanf("%d",&m);
    printf("%d\n",m);

    comp(m,string1,string2);
 

    printf("the final results are:%s\n",string2);
}
   int length(char *p)
   {
       int i=0;                 //i 必须赋值
      
      
           while(*p!='\0')
           {
               i++;
               p++;
           }
           return i;
   }
    void comp(int m,char string1[],char string2[])
    {
   
        char *p1,*p2;
        p1=string1;
        p2=string2;
        int n=length(string1);

        if(m>n){printf("m不合法");       //先判断特殊情况
        return;}
        else if(m==0)
              
        {
        while(*p1)
        *p2++=*p1++;
        *p2='\0';
        }

        
        else{           //如果没有else 就算m==0的情况 还会执行这个循环
            p1=p1+m*sizeof(char)-1  ;
       for(int i=0;i<n-m+2;i++)    *p2++=*p1++;
                  


        }
    }

over
2011-04-08 18:49
sd791002
Rank: 2
等 级:论坛游民
帖 子:88
专家分:87
注 册:2010-4-3
收藏
得分:0 
改完了哦  来分来分  哈啊哈哈
2011-04-08 18:51
sd791002
Rank: 2
等 级:论坛游民
帖 子:88
专家分:87
注 册:2010-4-3
收藏
得分:0 
对了 忘记告诉楼主了 你调试显示那个错误的原因是:
你在主函数里comp标志的是int 而后面写 的是void型的- -
2011-04-08 18:53
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 15楼 sd791002
请看一下我写的那个函数,实现的功能是不是跟你的一样
2011-04-08 18:55
sd791002
Rank: 2
等 级:论坛游民
帖 子:88
专家分:87
注 册:2010-4-3
收藏
得分:0 
回复 16楼 voidx
void comp(int m, char dest[], char src[]) {
    for (; m <= length(src); m++) {
        dest[m] = src[m];
    }
}


你是说这个函数?
不一样的

说明要求的是把字符数组1的第M字符开始传给字符数组2
你的问题有下:
实际从字符数组的第M+1个字符开始复制
传送给数组2的启起始位置也不对

void comp(int m, char dest[], char src[]) {
    for (int i=0; m <= length(src); m++,i++) {
        dest[i] = src[m];
    }
}

这样应该差不多吧
2011-04-08 19:12
sd791002
Rank: 2
等 级:论坛游民
帖 子:88
专家分:87
注 册:2010-4-3
收藏
得分:0 
错了错了 应该是
void comp(int m, char dest[], char src[]) {
    for (int i=0; m <= length(src); m++,i++) {
        dest[i] = src[m-1];
    }
}
2011-04-08 19:14
sd791002
Rank: 2
等 级:论坛游民
帖 子:88
专家分:87
注 册:2010-4-3
收藏
得分:0 
void comp(int m, char dest[], char src[]) {
    for (int i=0; m <= length(src)+1; m++,i++) {
        dest[i] = src[m-1];
    }
}

判断条件+1吧'\0'复制过去    应该没问题了 - -
2011-04-08 19:16
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
。。。难道是我理解错误?请教楼主?

m <= length(src) + 1 // 这个是错误滴, src[length(src)] == 0

你再想一下



[ 本帖最后由 voidx 于 2011-4-8 19:24 编辑 ]
2011-04-08 19:17
快速回复:一个字符串处理问题
数据加载中...
 
   



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

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