Day 24 C语言学习 二维字符数组 练习

目录

1.二维数组

 2.练习题


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++;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕容离875

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值