二维字符型数组可以存放多个字符串,可以批量操作字符串。
定义一个二维字符型数组:
char a[5][10];
这里定义了一个5行10列的二维字符型数组,表示可以存放5个长度小于10的字符串,一行存放一个字符串。(定义几行就表示能存几个字符串,几列就表示能存多长的字符串)
gets(a[0]);
a[ 0 ]就是第0行的首地址,这里表示从键盘输入一个字符串到这个二维字符型数组的第0行。
二位字符型数组:
#include <stdio.h>
int main()
{
char a[5][10];
int i;
for ( i=0; i<5; i++ )
{
gets(a[i]);
}
for ( i=0; i<5; i++ )
{
printf("a[%d] = %s\n",i,a[i]);
}
return 0;
}
输入:
qian
ru
shi
xue
xi
输出:
a[0] = qian
a[1] = ru
a[2] = shi
a[4] = xue
a[5] = xi
找出最大的字符串:
#include <stdio.h>
#include <string.h>
int main()
{
char a[5][10];
char max[10];
int i,j;
for ( i=0; i<5; i++ )
{
gets(a[i]);
}
printf("\n");
//找出最大的字符串
strcpy(max,a[0]);
for ( i=0; i<5; i++)
{
if( strcmp(a[i],max) > 0)
{
strcpy(max,a[i]);
}
}
puts(max);
return 0;
}
输入:
aa
bb
cc
dd
ee
输出:
ee
用插入排序给字符串从小到大排序:
#include <stdio.h>
#include <string.h>
int main()
{
char a[5][10];
char temp[10];
int i,j;
for ( i=0; i<5; i++ )
{
gets(a[i]);
}
printf("\n");
//插入排序
for( i=1; i<5; i++)
{
strcpy(temp,a[i]);
j=i;
while (j>0 && strcmp(temp,a[j-1])<0)
{
strcpy(a[j],a[j-1]);
j--;
}
strcpy(a[j],temp);
}
for ( i=0; i<5; i++)
{
puts(a[i]);
}
return 0;
}
输入:
b
e
d
a
c
输出:
a
b
c
d
e
用二分查找,找出对应字符串:
#include <stdio.h>
#include <string.h>
int main()
{
char a[5][10];
char temp[10];
int i,j;
for ( i=0; i<5; i++ )
{
gets(a[i]);
}
printf("\n");
//插入排序
for( i=1; i<5; i++)
{
strcpy(temp,a[i]);
j=i;
while (j>0 && strcmp(temp,a[j-1])<0)
{
strcpy(a[j],a[j-1]);
j--;
}
strcpy(a[j],temp);
}
//二分查找
int begin,mid,end;
begin = 0;
end = 5-1;
char m[10];
printf("m = ");
gets(m);
while ( begin <= end )
{
mid = ( begin + end )/2;
if( strcmp(m,a[mid])<0 )
{
end = mid - 1;
}
else if ( strcmp(a[mid],m)<0)
{
begin = mid + 1;
}
else
{
break;
}
}
if ( begin <= end )
printf("found!\n");
else
printf("no found!\n");
for ( i=0; i<5; i++)
{
puts(a[i]);
}
return 0;
}
输入:
aa
bb
cc
dd
ee
输入要找的字符串m: