目录
char s[3][4];
二维字符型数组 ---批量的处理字符串
一维字符型数组 --- 存储字符串数据
初始化:
char s[3][10] = {{"hello"},{"world"},{"english"}};
char s[3][10] = {"hello","world","english"};
输入字符串 :
gets(s[0]); //s[0] 就是第0行 这个一维字符型数组的数组名
前面提过,二维数组的本质,实际上是一位数组的一位数组,字符型就是行里面的一维数组存储的是一个一个的字符串。
运用:
(1)输入输出
#include <stdio.h>
int main(void)
{
char s[3][10] = {"hello","world","china"};
// 输入3个字符串
int i = 0 ;
for (i = 0; i < 3; ++i)
{
gets(s[i]);
}
// 将字符串打印输出
for (i = 0; i < 3; ++i)
{
printf("s[%d] = %s\n",i,s[i]);
}
return 0;
}
(2)找最大值
#include <stdio.h>
#include <string.h>
int main(void)
{
char s[5][10] = {"hello","world","china"};
int i = 0 ;
int j = 0;
for (i = 0; i < 5; ++i)
{
gets(s[i]);
}
char max[10];
strcpy(max,s[0]);
for (i = 1; i < 5; ++i)
{
if (strcmp(s[i],max) > 0)
{
strcpy(max,s[i]);
}
}
printf("max str = %s\n",max);
return 0;
}
(3)选择排序
#include <stdio.h>
#include <string.h>
int main(void)
{
char s[5][10] = {"hello","world","china"};
int i = 0 ;
int j = 0;
for (i = 0; i < 5; ++i)
{
gets(s[i]);
}
for (i = 0; i < 5-1; ++i)
{
for (j = i+1; j < 5; ++j)
{
if (strcmp(s[i],s[j]) > 0)
{
char temp[10];
strcpy(temp,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],temp);
}
}
}
for (i = 0; i < 5; ++i)
{
printf("%s\n",s[i]);
}
return 0;
}
(4)二分查找法
注意是有序的字符串组,可以先用排序,下面只是查找部分的代码
#include <stdio.h>
#include <string.h>
int main(void)
{
char s[5][10] = {"hello","world","china"};
int i = 0 ;
int j = 0;
//int str;
char str[10];
printf("Input a string:");
gets(str);
int begin = 0;
int end = 5-1;
int mid = 0;
while (begin <= end) //
{
mid = (end + begin)/2;
if (strcmp(s[mid],str) < 0)
{
begin = mid + 1;
}else if (strcmp(s[mid],str) > 0)
{
end = mid -1;
}else
{
break;
}
}
if (begin <= end)
{
printf("%s found!\n",str);
}else
{
printf("not found!\n");
}
return 0;
}