目录
1.二维数组
多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。声明一个 x 行 y 列的二维整型数组,形式如下:
char arrayname[x][y](row)(column)
二维数组的初始化
char c[][10]={"apple","orange","banana"};
可通过for循环进行二维数组的输入和输出
for(int i = 0; i < 5; i++)
{
scanf("%s", arr[i]);
}
for(int i = 0; i < 5; i++)
{
printf("%s\n", arr[i]);
}
接下来就可以对每一个字符串进行冒泡排序了(根据每个字符串的大小排序)
#include<stdio.h>
#include<string.h>
void scanf_arr(char (*p)[10],int row,int colume)
{
int i;
for(i=0;i<row;i++)
{
// scanf("%s",p[i]);
gets(p[i]);
}
}
void print_arr(char (*p)[10],int row,int colume)
{
int i;
for(i=0;i<row;i++)
{
// printf("%s\n",p[i]);
puts(p[i]);
}
}
void sort_arr(char (*p)[10],int row,int colume)
{
int i,j;
char temp[10];
for(i=0;i<row-1;i++)
{
for(j=0;j<row-1-i;j++)
{
if(strcmp(p[j],p[j+1])>0)
{
strcpy(temp,p[i]);
strcpy(p[j],p[j+1]);
strcpy(p[j+1],temp);
}
}
}
}
int main()
{
char arr[5][10]={"cello","sappy","ayebye","deeyou","eorld"};
// scanf_arr(arr,5,10);
sort_arr(arr,5,10);
print_arr(arr,5,10);
return 0;
}
2.练习题
1.匹配算法:KMP
从字符串匹配出子字符串的位置:12a34123a56a12b3c1234abc3433 求123456
#include<stdio.h>
void main()
{
char buf[]="123ab1123fa124abc1234abcd32";
char sub[]="1234";
//遍历字符串:
int i = 0,x,y;
while(buf[i]!='\0')
{
if(sub[0]==buf[i])//buf从第i个到i+4个字符是否相同
{
x = 1;
//比较两个字符串是否相同:
while(sub[x]==buf[i+x] && sub[x]!='\0')x++;
if(4==x)
{
printf("存在%s的字符串,它的位置是%d\n",sub,i+x);
return ;
}
}
//从下个字符再匹配
i++;
}
printf("不存在%s\n",sub);
}
2.对strcpy和strcat分别用指针和下标的方式进行封装
#include<stdio.h>
#include<string.h>
void strcpy_s(char *dest, char *src);
char *strcpy_p(char *dest, char *src);
void strcat_s(char *dest, char *src);
void strcat_p(char *dest, char *src);
int main()
{
char src[100];
char dest[100];
printf("请输入第一个字符串:\n");
gets(src);
printf("请输入第二个字符串:\n");
gets(dest);
// strcpy_s(dest, src);
// strcpy_p(dest, src);
// printf("复制后的字符串\n");
printf("拼接后的字符串为:\n");
// strcat_s(dest, src);
strcat_p(dest, src);
puts(src);
return 0;
}
void strcpy_s(char *dest, char *src)
{
int i = 0;
while(src[i] != '\0')
{
dest[i] = src[i];
i++;
}
}
char *strcpy_p(char *dest, char *src)
{
char *ret = dest;
while(*dest++ == *src++)
{
continue;
}
return ret;
}
void strcat_s(char *dest, char *src)
{
int p = strlen(src);
int i = 0;
while(dest[i] != '\0')
{
src[p] = dest[i];
i++;
p++;
}
}
void strcat_p(char *dest, char *src)
{
int p = strlen(src);
char *psrc = &src[p];
int i = 0;
while(dest[i] != '\0')
{
psrc[i] = dest[i];
i++;
}
}