输入5个字符串,找出最大的,输出。要用2维指针,数组。
#include<iostream.h>
#include<string.h>
void main()
{
char str[5][81];
char *p[5],**q,**max;
int i;
cout<<"请输入5组字符串:"<<endl;
for(i=0;i<5;i++)
{
p[i]=str[i];
cin>>p[i];
}
**max=*p[0];
for(i=1;i<5;i++)
if(strcmp(**max,*p[i])<0)
*max=p[i];
cout<<*max<<endl;
}
1.指针刚定义时,若没有指向指定的位置是不能用的,因为它指向随机的一个地址。要想使用必须指向一个明确的地址。
如上T,*p[5]是一个指针数组,也就是一个包含五个指针的数组,
p[0]指向第一行(也就是p[0]中的数字是第一行的地址),依次类推;
上面定义*p[5]后并没有应用,只有在初始化后(即p[i]=str[i]),才进
行运算,这里p[i]=str[i]就是将指针p[i]指向了二维数组str的行地址。
2。strcmp()中两个参数都是字符串,所以应该是两个字符数组或指针
T中*max和p[i]均是指向一个行的指针。
3。*m=p[i]表示*m和p[i]指向一个地址,因为p[i]前面已经指定了位置,
所以此处就可以这样用了。
max=p是将两个二级指针指向同一地址。
*max=p[i];
cout<<*max<<endl;
少了个*
楼主的代码有三个错误:
1、**max=*p[0]; //指针未初始化,指向的是未知的地址
2、strcmp(**max,*p[i]) //strcmp函数的参数是char *类型,而**max和*p[i]是char类型
3、*max=p[i]; //错误同1,都是使用未初始化的指针
正确的代码如下,附运行截图:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str[5][81], *p[5], **max;
int i;
cout << "请输入5组字符串:" << endl;
for(i = 0; i < 5; ++i)
{
p[i] = str[i];
cin >> p[i];
}
max = p;
for(i = 1; i < 5; ++i)
if(strcmp(*max, p[i]) < 0)
max = p + i;
cout << "最大的字符串是:" << *max << endl;
return 0;
}
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息