c语言的一个问题,一个找最长字符串的函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言的一个问题,一个找最长字符串的函数相关的知识,希望对你有一定的参考价值。

char *fun(char (*a)[81], int num, char *max)

int i=0;
max=a[0];
for(i=0;i<num;i++) /*找出最长的一个字符串*/
if(strlen(max)<strlen(a[i]))
max=a[i];
return max; /*传回最长字符串的地址*/

为什么max是指针了,还要return,而且开始为什么要定义i=0,在循环语句已经赋值了,形参转换为实参是不是用指针的时候或者用return的时候。

你这道题是模拟题里的吧?首先,你注意看题目,要求是:返回找到的字符串的地址。那么这个时候就一定要用return,返回指针max中的地址.
其次,int i=0,此时写义成int i也是可以的。正如你所说~i在之后是从0开始调用,那么开始不必赋初值。两种都对
参考技术A 道理很简单啊
实参和形参不在同一个内存空间中,这个你该懂
你传max过去,是吧指针传过去了,如果子函数中吧a中最长的数据拷贝到max中的话,不用return
但是你程序只是把a[i]赋值给了max,那么实参max的位置内存是不会变的,你懂吗?
其实你这个程序,max一点用处一没有,在子函数中申请一个指针即可

这个就是一般学习的误区
用指针可以改变调用它地方的参数的值。其实不然
经典的例子就是交换两个数的值
void swap(int *a,int *b)

int t;
t=*a;
*a=*b;
*b=t;



main()

int x=3,y=5;
int p1=&x,p2=&b;

printf("x=%d y=%d\n",x,y);
swap(p1,p2);
printf("x=%d y=%d\n",x,y);


如果你打印出p1,p2的值,在调用前,调用后,子函数中ab交换前,子函数中ab调用后
你会发现,p1,p2,a,b的值是不会变的。是内存地址
参考技术B 因为形参表那里max就是指针啊,定义赋值有时是防止访问错误,而且养好在for语句里面赋值的习惯会比较清晰不会混乱,形参就是形参啊,除了用固定地址运算的形参就是代表形参之外,形参不能转为实参 参考技术C 因为返回类型是char型,必须要有return, max返回的是地址。形参是形参,实参是实参,实参是给形参赋值。

用c语言编程,编写一个函数,输入一行字符,将字符串中最长的单词输出。

参考技术A #include <stdio.h>
char *longest(char *p)
    char *t,max,n;
    while(*p==' ') p++;
    for(max=n=0,t=p;*p;p++)
        if(*p!=' ')
            n++;
        else
            if(max<=n)
                max=n,t=p-n;
            n=0;
        
    return max<=n ? p-n : t;

int main(void)
    char str[1000],*p;
    scanf("%[A-Z a-z]",str);
    for(p=longest(str);*p && *p!=' ';printf("%c",*p++));
    printf("\\n");
    return 0;

本回答被提问者和网友采纳

以上是关于c语言的一个问题,一个找最长字符串的函数的主要内容,如果未能解决你的问题,请参考以下文章

怎么寻找字符串中最长的数字字符串 C语言

用c语言编程,编写一个函数,输入一行字符,将字符串中最长的单词输出。

2. 用一个函数来实现将一行字符串中最长的单词输出。此行字符从主函数传递给该函数。C语言高手快出现

c语言,从字符串中找出最长的,并输出。

C语言编程:写一个函数,输入一行字符,将此字符串中最长的单词输出.

c语言输出n个字符串中最长字符串