| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1427 人关注过本帖
标题:一道课后有关函数的习题
只看楼主 加入收藏
seep666
Rank: 2
等 级:论坛游民
帖 子:91
专家分:14
注 册:2010-3-18
结帖率:62.07%
收藏
已结贴  问题点数:20 回复次数:22 
一道课后有关函数的习题
题目是:输入两个字符串,把较长的字符串返回并输出,不能用字符长度函数(strlen).
下面是我做的,不过不知道哪里错了,是不是返回时错了`
#include"stdio.h"
   char fun(char *s,char *t)      
 {
 int m,n;         
  while(*s!='\0')
  {m++;               \*m,n分别计算出两个字符串的长度*\
  s++;}
  while(*t!='\0')
     { n++;
      t++;}
  if(m>n)
      return s;
  else
      return t;
 }
   void main()
   {
   char a[20],b[10];
    gets(a);
    gets(b);
   printf("%s",fun(a,b));
   }
搜索更多相关主题的帖子: 函数 习题 
2010-08-18 11:04
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:0 
char * fun(char *s,char *t)

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-08-18 11:08
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
回复 楼主 seep666
是呀 你函数的类型应该是 指向字符的指针类型,返回时 指向较长那个字符串的起始字符

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-18 11:14
seep666
Rank: 2
等 级:论坛游民
帖 子:91
专家分:14
注 册:2010-3-18
收藏
得分:0 
现在知道了,还有那两个函数不能等于空格,不然后面就无意义了,不过还是谢谢了
2010-08-18 11:21
燕强
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:78
专家分:188
注 册:2010-8-11
收藏
得分:20 
#include"stdio.h"
   char fun(char *s,char *t)      
{
int m,n;            //这里的m,n要赋初值0;
  while(*s!='\0')   //这里不能用指针s 去移数组元素,会导致你后面返回的是指向数组尾的指针,,导致不能正常显示。因声明另一个指针,用这个指针去移数组元素,下面的t也一样。。。
  {m++;               \*m,n分别计算出两个字符串的长度*\
  s++;}
  while(*t!='\0')
     { n++;
      t++;}
  if(m>n)
      return s;
  else
      return t;
}
   void main()
   {
   char a[20],b[10];
    gets(a);
    gets(b);
   printf("%s",fun(a,b));
   }

正确的应该是这样的。
#include<stdio.h>
char *fun(char *s,char *t)      
{
    int m,n;
    m = n =0;
    char *p;
    p = s;         
      while(*p!='\0')
      {
          m++;               
        p++;
    }
    p = t;
      while(*p!='\0')
    {
           n++;
           p++;
   }
   return (m > n) ? s : t;
}
int main(void)
{
    char a[20],b[20];
    gets(a);
    gets(b);
       printf("%s\n",fun(a,b));
       return 0;
}
2010-08-18 11:30
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
你没有把t重新指向字符串的首地址

清风拂暮(木)
2010-08-18 11:32
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
你不用记长度,就找 '\0' 就可以,谁的 '\0' 在前面,谁就短。
类似下面这样不知道行不行:
程序代码:
char *fun(const char * ss, const char *tt)
{
    const char *s = ss, *t = tt;
    while (*s != '\0' && *t != '\0')
        ++s, ++t;
    if (*s == '\0') return tt;
    return ss;
}



[ 本帖最后由 pangding 于 2010-8-18 13:56 编辑 ]
2010-08-18 13:52
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 7楼 pangding
你没说一样长时怎么办,我那个是当 strlen(t) >= strlen(s) 时返回 t。不过还写得不好,改一改。


[ 本帖最后由 pangding 于 2010-8-18 13:54 编辑 ]
2010-08-18 13:53
黑色风信子
Rank: 2
等 级:论坛游民
帖 子:19
专家分:39
注 册:2010-8-9
收藏
得分:0 
\*m,n分别计算出两个字符串的长度*\斜线反了 /*m,n分别计算出两个字符串的长度*/才对
2010-08-18 14:17
hy1107648
Rank: 2
等 级:论坛游民
帖 子:80
专家分:40
注 册:2010-2-8
收藏
得分:0 
是不是应该把return s;和 改为  return t;分别改为return *s;和return *t;啊???因为s和t都是指针,题目要求返回的是字符串,所以应该是*s和*t吧。请指教。
2010-08-18 14:23
快速回复:一道课后有关函数的习题
数据加载中...
 
   



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

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