什么二维字符串的指针?概念不清
我说的是二维数组或者指针数组
下面是只用一个指针数组的形式
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char *p,*ss[5];
int i,j;
for(i=0;i<5;i++)//输入
{
ss[i]=(char *)malloc(80);
memset(ss[i],'\0',80);
scanf("%s",ss[i]);
}
printf("交换前:\n");//打印
for(i=0;i<5;i++)
printf("%s ",ss[i]);
printf("\n");
for(i=0;i<4;i++)//比较交换
for(j=i+1;j<5;j++)
if(strcmp(ss[i],ss[j])>0)
{
p=ss[i];
ss[i]=ss[j];
ss[j]=p;
}
printf("交换后:\n");//打印
for(i=0;i<5;i++)
printf("%s ",ss[i]);
printf("\n");
return 0;
}
---------------------------------------------------------------------------------------------------------------------
如果要只用用二维数组,那么比较的时候就不能用strcmp,因为二维数组的每一维都是一个数组的首地址,是一个常量,不能改变,要循环比较二维数组每一维的每个字符元素,交换的时候也是每个字符元素进行交换的
如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char temp,*p,s[5][80];
int i,j,k;
for(i=0;i<5;i++)//输入
{
scanf("%s",s[i]);
printf("%s\n",s[i]);
}
printf("交换前:\n");//打印
for(i=0;i<5;i++)
printf("%s ",s[i]);
printf("\n");
for(i=0;i<4;i++)//比较交换
for(j=i+1;j<5;j++)
{
k=0;
while(s[i][k]==s[j][k])
k++;
if(s[i][k]>s[j][k])
{
for(k=0;k<80;k++)
{
temp=s[i][k];
s[i][k]=s[j][k];
s[j][k]=temp;
}
}
}
printf("交换后:\n");//打印
for(i=0;i<5;i++)
printf("%s ",s[i]);
printf("\n");
return 0;
}
---------------------------------------------------------------------------------------------------------------------
下面是用一个二维数组和一个指针数组实现的,向二维数组输入字符串后,用ss的每个指针元素指向s的每一维,才能strcmp比较
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char *p,s[5][80],*ss[5];
int i,j;
for(i=0;i<5;i++)//输入
scanf("%s",s[i]);
for(i=0;i<5;i++)//赋值
ss[i]=s[i];
printf("交换前:\n");//打印
for(i=0;i<5;i++)
printf("%s ",ss[i]);
printf("\n");
for(i=0;i<4;i++)//比较交换
for(j=i+1;j<5;j++)
if(strcmp(ss[i],ss[j])>0)
{
p=ss[i];
ss[i]=ss[j];
ss[j]=p;
}
printf("交换后:\n");//打印
for(i=0;i<5;i++)
printf("%s ",ss[i]);
printf("\n");
return 0;
}
自己再理解理解,多看看书
我说的是二维数组或者指针数组
下面是只用一个指针数组的形式
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char *p,*ss[5];
int i,j;
for(i=0;i<5;i++)//输入
{
ss[i]=(char *)malloc(80);
memset(ss[i],'\0',80);
scanf("%s",ss[i]);
}
printf("交换前:\n");//打印
for(i=0;i<5;i++)
printf("%s ",ss[i]);
printf("\n");
for(i=0;i<4;i++)//比较交换
for(j=i+1;j<5;j++)
if(strcmp(ss[i],ss[j])>0)
{
p=ss[i];
ss[i]=ss[j];
ss[j]=p;
}
printf("交换后:\n");//打印
for(i=0;i<5;i++)
printf("%s ",ss[i]);
printf("\n");
return 0;
}
---------------------------------------------------------------------------------------------------------------------
如果要只用用二维数组,那么比较的时候就不能用strcmp,因为二维数组的每一维都是一个数组的首地址,是一个常量,不能改变,要循环比较二维数组每一维的每个字符元素,交换的时候也是每个字符元素进行交换的
如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char temp,*p,s[5][80];
int i,j,k;
for(i=0;i<5;i++)//输入
{
scanf("%s",s[i]);
printf("%s\n",s[i]);
}
printf("交换前:\n");//打印
for(i=0;i<5;i++)
printf("%s ",s[i]);
printf("\n");
for(i=0;i<4;i++)//比较交换
for(j=i+1;j<5;j++)
{
k=0;
while(s[i][k]==s[j][k])
k++;
if(s[i][k]>s[j][k])
{
for(k=0;k<80;k++)
{
temp=s[i][k];
s[i][k]=s[j][k];
s[j][k]=temp;
}
}
}
printf("交换后:\n");//打印
for(i=0;i<5;i++)
printf("%s ",s[i]);
printf("\n");
return 0;
}
---------------------------------------------------------------------------------------------------------------------
下面是用一个二维数组和一个指针数组实现的,向二维数组输入字符串后,用ss的每个指针元素指向s的每一维,才能strcmp比较
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char *p,s[5][80],*ss[5];
int i,j;
for(i=0;i<5;i++)//输入
scanf("%s",s[i]);
for(i=0;i<5;i++)//赋值
ss[i]=s[i];
printf("交换前:\n");//打印
for(i=0;i<5;i++)
printf("%s ",ss[i]);
printf("\n");
for(i=0;i<4;i++)//比较交换
for(j=i+1;j<5;j++)
if(strcmp(ss[i],ss[j])>0)
{
p=ss[i];
ss[i]=ss[j];
ss[j]=p;
}
printf("交换后:\n");//打印
for(i=0;i<5;i++)
printf("%s ",ss[i]);
printf("\n");
return 0;
}
自己再理解理解,多看看书
小小战士,战士中的战斗机!