| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1050 人关注过本帖
标题:一个字符串处理问题
只看楼主 加入收藏
sange
Rank: 2
等 级:论坛游民
帖 子:12
专家分:26
注 册:2011-3-8
结帖率:33.33%
收藏
 问题点数:0 回复次数:22 
一个字符串处理问题
请路过的高手帮我看看问题的症结,小弟先谢谢了。
#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);//测量字符串的长度
    int comp(int n,int m,char string1[],char string2[]);

    scanf("%d",&m);

    comp(n,m,string1,string2);//将第m个字符开始的全部字符复制成为另一个字符串
    printf("the final results are:");

    printf("%s",string2);
}
   int length(char *p)
   {
       int i;
      
      
           while(*p!='\0')
           {
               i++;
               p++;
           }
           return i;
   }
    void comp(int n,int m,char string1[],char string2[])
    {
   
        char *p1,*p2;
        p1=string1;
        p2=string2;
        if(m==0)
        {
        while(*p1)
        *p2++=*p1++;
        *p2='\0';
        }
        for(p2=p1+m;p2<p1+n;p2++)
            *p2=*p1;
        *p2='\0';
    }

Compiling...
1.cpp
Linking...
1.obj : error LNK2001: unresolved external symbol "int __cdecl comp(int,int,char * const,char * const)" (?comp@@YAHHHQAD0@Z)
Debug/333.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.
搜索更多相关主题的帖子: 字符串 
2011-04-08 17:00
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
int comp(int n, int m, char string1[], char string2[]);
void comp(int n, int m, char string1[], char string2[]);

这两次函数定义的函数返回值类型不同。
而且我猜想楼主的 void comp(int n, int m, char string1[], char string2[]); 这个函数写错了。
具体的说一下这个函数要实现的功能。
2011-04-08 17:09
sange
Rank: 2
等 级:论坛游民
帖 子:12
专家分:26
注 册:2011-3-8
收藏
得分:0 
谢谢vodix,忘记写标题了,有一个字符串,包含n个字符。写一个函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。函数comp(int n,int m,char string1[],char string2[])实现第m个字符开始的全部字符复制成为另一个字符串。
2011-04-08 17:39
sd791002
Rank: 2
等 级:论坛游民
帖 子:88
专家分:87
注 册:2010-4-3
收藏
得分:0 
int length(char *p)
   {
       int i;
      
      
           while(*p!='\0')
           {
               i++;
               p++;
           }
           return i;
   }
里面i没赋初值吧?i++是什么你知道么?
 if(m==0)
        {
        while(*p1)
        *p2++=*p1++;
        *p2='\0';
        }
这段建议#include<string.h>后用strcpy函数
for(p2=p1+m;p2<p1+n;p2++)
            *p2=*p1;
这个循环写错了
2011-04-08 17:40
sd791002
Rank: 2
等 级:论坛游民
帖 子:88
专家分:87
注 册:2010-4-3
收藏
得分:0 
  void comp(int n,int m,char string1[],char string2[])
    {
   
        char *p1,*p2;
        p1=string1;
        p2=string2;
        if(m==0)
        {
        while(*p1)
        *p2++=*p1++;
        *p2='\0';
        }
        for(p2=p1+m;p2<p1+n;p2++)
            *p2=*p1;
        *p2='\0';
    }

这个函数里面就没有用到n嘛

先找出问题 在慢慢修改调试~  我先吃饭去了
2011-04-08 17:44
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
程序代码:
void comp(int m, char dest[], char src[]) {
    for (; m < length(src) && m < length(dest); m++) {
        dest[m] = src[m];
    }
} 

// 又看了一下楼主的要求,上面那个不太对,改正一下

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

// 至于数组 dest 和 src 的长度就要靠传递的参数保证 dest 的长度不小于 src 了

上面的函数就可以实现你要的功能。
函数 comp(...) 的功能是将字符数组 src 从 m 开始的元素复制到字符数组 dest 的同一位置。
思路非常直接,m 表示需要复制的元素的下标,逐次将 src 的元素复制到 dest 中。
复制过程中检查 src 和 dest 的长度,避免越界。

顺便说一下,c 的标准库 <string.h> 可以实现你这个程序中的全部功能,如果不是出于练习目的,建议你使用标准库。

[ 本帖最后由 voidx 于 2011-4-8 18:53 编辑 ]
2011-04-08 17:52
sd791002
Rank: 2
等 级:论坛游民
帖 子:88
专家分:87
注 册:2010-4-3
收藏
得分:0 
*/
#include<stdio.h>
#include<string.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)
        strcpy(string2,string1);
        
        else{                         //如果没有else 就算m==0的情况 还会执行这个循环
       p1=p1+m*sizeof(char)-1;
       strcpy(p2,p1);
        }
    }
2011-04-08 18:38
sd791002
Rank: 2
等 级:论坛游民
帖 子:88
专家分:87
注 册:2010-4-3
收藏
得分:0 
晕 我都忘记标准库有这个函数了 那我不用string.h 再改改- -
2011-04-08 18:39
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
7楼 int i = 0; 正确;
void comp(...) 嘛,如果楼主要用 <string.h> 干嘛还要自己写个函数呢?

[ 本帖最后由 voidx 于 2011-4-8 18:45 编辑 ]
2011-04-08 18:42
sd791002
Rank: 2
等 级:论坛游民
帖 子:88
专家分:87
注 册:2010-4-3
收藏
得分:0 
不过7楼我给你的三个注释是标准错误- -
2011-04-08 18:42
快速回复:一个字符串处理问题
数据加载中...
 
   



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

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