3 回答

TA貢獻1827條經驗 獲得超8個贊
#include<stdio.h>
#include<string.h>
char* fun(int,char max[][87]);
int main()
{
char ss[10][87];int numz=0;char* k;
do
{
printf("輸入第%d個字符串:\n",numz);
gets(ss[numz]);
numz+=1;
}while(strcmp(ss[numz-1],"****")!=0);
numz-=2;
k=fun(numz,ss);
printf("地址是:%X\n",k);
return 0;
}
char* fun(int num, char max[][87])
{
int i;
char *s;
s=max[0];
for(i=0;i<=num-1;i++)
{
if(strlen(s)<strlen(max[i]))
s = max[i];
}
printf("最長的字符串是:\n");
puts(s);
return (s);
}
改了一下 自己研究一下 呵呵!~ 沒什么大問題
PS:只隨便調試了一下 不知道算法有無問題

TA貢獻1862條經驗 獲得超7個贊
上面的都做出來了我就不做了,就分析下你錯的地方:
C:\Documents and Settings\Administrator\桌面\編程\lianan.c(12) : warning C4047: '!=' : 'int ' differs in levels of indirection from 'char [5]'
錯誤語句:while(*ss[numz-1]!="****");
解釋:*ss[numz-1]代表一個地址不能等于字符串,可改為ss[numz-1]。
C:\Documents and Settings\Administrator\桌面\編程\lianan.c(14) : warning C4047: 'function' : 'char ** ' differs in levels of indirection from 'char [10][87]'
錯誤語句:k=fun(numz,ss);
解釋:ss為首地址指針。不能傳給char ** ,只能傳給char *。
C:\Documents and Settings\Administrator\桌面\編程\lianan.c(22) : error C2106: '=' : left operand must be l-value
錯誤語句:s[0]=*(max);
解釋s[0]為一個地址指針,不能存儲。給數組賦值要用
for(int i=0;i<max;i++){s[0][i]=*(max+i);}
C:\Documents and Settings\Administrator\桌面\編程\lianan.c(25) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'char [10][87]'
錯誤語句:if(strlen(s)<strlen(*(max+i+1)))
解釋:strlen需要傳遞一個char地址,s可改為s[0]。
C:\Documents and Settings\Administrator\桌面\編程\lianan.c(31) : error C2115: 'return' : incompatible types
錯誤語句:return (max);
解釋:函數返回值類型要更定義類型一樣。max為char ** 類型,定義函數確為float。
相同錯誤就不再說了。

TA貢獻1799條經驗 獲得超9個贊
#include <stdio.h>
#include <string.h>
#define MAX_ROW 10
#define MAX_COL 87
/**********************************/
char * fun(int num,char max[][MAX_COL])
{
int i;
char *s;
s=*(max);
for(i=0;i<=num-1;i++)
{
if(strlen(s)<strlen(max+i+1)) { s=max+i+1; }
}
printf("The longest string is :\n");
puts(s);
return s;
}
/***********************************/
int main()
{
char ss[MAX_ROW][MAX_COL];
int numz=0;
char *k;
do
{
printf("Please input string_%d :\n",numz);
gets(ss[numz]);
numz+=1;
}while(strcmp(ss[numz-1],"****"));
/* 字符串的比較不能直接用地址,但可以用strcmp函數。相同返回0,不同則返回1 */
numz-=2;
k=fun(numz,ss);
printf("The address is 0x%x\n",k);
getch();
return 0;
}
添加回答
舉報