C语言 指针进阶问题;
大一课程题目是编写程序,输入n(n<10)个字符串,输出其中最长字符串的有效长度。要求自定义函数intmax_len(char*s[],intn),用于计算有n个元素的指...
大一课程
题目是
编写程序,输入n(n<10)个字符串,输出其中最长字符串的有效长度。要求自定义函数int max_len(char*s[ ], int n),用于计算有n个元素的指针数组s中最长的字符串的长度。
我自己编了一个程序,是动态输入多个字符串的,按照我想的应该是我边输入,指针数组变指向对应字符串,但是最后运行的时候发现根本停不下,求大神看看。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
int i,n,x,a;
char text[10],*p[10];
scanf("%d",&n);
scanf("%s",text);
i=1;
a=n;
while(i<=a){
p[n]=(char*)malloc(sizeof(char)*(strlen(text)+1));
strcpy(p[n],text);
n++;
i++;
scanf("%s",text);
}
int max_len(char *s[ ], int n);
x=max_len(p,n);
printf("%d",x);
free(p);
return 0;
}
int max_len(char *s[ ], int n)
{
int i,index,x;
index=0;
for(i=1;i<n;i++)
if(strlen(s[index])<strlen(s[i]))
index=i;
x=strlen(s[index]);
return x;
}
谢谢啦! XD 展开
题目是
编写程序,输入n(n<10)个字符串,输出其中最长字符串的有效长度。要求自定义函数int max_len(char*s[ ], int n),用于计算有n个元素的指针数组s中最长的字符串的长度。
我自己编了一个程序,是动态输入多个字符串的,按照我想的应该是我边输入,指针数组变指向对应字符串,但是最后运行的时候发现根本停不下,求大神看看。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
int i,n,x,a;
char text[10],*p[10];
scanf("%d",&n);
scanf("%s",text);
i=1;
a=n;
while(i<=a){
p[n]=(char*)malloc(sizeof(char)*(strlen(text)+1));
strcpy(p[n],text);
n++;
i++;
scanf("%s",text);
}
int max_len(char *s[ ], int n);
x=max_len(p,n);
printf("%d",x);
free(p);
return 0;
}
int max_len(char *s[ ], int n)
{
int i,index,x;
index=0;
for(i=1;i<n;i++)
if(strlen(s[index])<strlen(s[i]))
index=i;
x=strlen(s[index]);
return x;
}
谢谢啦! XD 展开
2个回答
展开全部
你的程序里有几个问题:
1.编程思路和要求的偏差,要求里说明限制字符串的数量不超过10,但对字符串的长度没有限定,在你的程序里通过长度限定为10的text变量来接收输入的字符串,实际上已经把输入字符串的长度限定在了10的范围内;
2.冗余的变量,在主函数里变量a可能原意是保存n的值(n的值在循环里被更改了),即使是这样,在调用函数max_len时:“x=max_len(p,n); ”,传入的第二个参数却不是a,而是已经被改变了的n,这里不再详说,参考后边的程序
3.动态空间的释放,程序中使用指针数组来存储各输入字符串的首地址,在释放这些指针时,需逐个指针进行释放,具体操作见后边的程序
4.函数返回值的设定,建议返回下标,这样方便其它程序对最长字符串进行的可能的其它操作
下边是按照程序要求重写的程序,可以参考,思路是为每个字符串先分配额定的长度,C语言编写,VC编译:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int max_len(char *s[ ], int n)
{
int i,index;
for(index=0,i=1;i<n;i++)
{
if(strlen(s[index])<strlen(s[i])) index =i;
}
return index; //返回的是最长字符串在指针数组中的下标,方便在其他程序里使用
}
int main(void)
{
int i,n;
char *p[10];
printf("输入字符串个数(应小于10):");
scanf("%d",&n);
for(i=0;i<n;i++)
{
p[i] = (char *)malloc(sizeof(char)*100); //为每个字符串分配额定空间:100
printf("输入第%d个字符串:",i);
scanf("%s",p[i]);
}
printf("最长字符串长度为%d\n",strlen(p[max_len(p,n)]));//返回的是标号,再计算其对应字符串长度
for(i=0;i<n;i++)
{
free(p[i]);//逐个的释放
}
return 0;
}
展开全部
int main(void)
{
int i,n,x,a;
char text[10],*p[10];
scanf("%d",&n);
scanf("%s",text);
i=1;
a=n;
// 最好用do while循环,否则要多输入一行无用的数据
while(i<=a){
//p[n]=(char*)malloc(sizeof(char)*(strlen(text)+1));
//strcpy(p[n],text);
//n++;
p[i]=(char*)malloc(sizeof(char)*(strlen(text)+1));
strcpy(p[i],text);//这其实是从下标为1 的元素开始复制的,p[0]还是未 //定义
i++;
scanf("%s",text);
}
int max_len(char *s[ ], int n);
x=max_len(p,n);
printf("%d",x);
//free(p); //这里p其是不是一个指针,他是一个数组,数组元素是指针而已
return 0;
}
int max_len(char *s[ ], int n)
{
int i,index,x=0;
index=0;
s[index]="";//这里给下标为s[0]赋初值,因为它此时的值是未定义的,所以strlen(s[index]无意义
for(i=1;i<=n;i++)
if(strlen(s[index])<strlen(s[i]))
index=i;
x=strlen(s[index]);
return x;
}
这代码建议你全部重新写过,太多问题
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询