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的时候。
其次,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语言编程,编写一个函数,输入一行字符,将字符串中最长的单词输出。
2. 用一个函数来实现将一行字符串中最长的单词输出。此行字符从主函数传递给该函数。C语言高手快出现