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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
引用中的代码片段展示了如何使用C语言中的strcpy函数将一个二维数组复制到另一个数组中。在这个例子中,数组a为一个3行1列的二维数组,数组d为一个1行3列的二维数组。首先,通过循环将数组a中的元素输入。然后,通过嵌套的循环将数组a的元素复制到数组d中,并使用printf函数打印出复制后的结果。可以看到,strcpy函数被用来复制数组元素。 引用中的代码片段展示了如何使用C语言中的strcpy函数对一个二维数组进行排序。在这个例子中,数组arr为一个5行10列的二维数组,包含了一些字符串。通过调用sort_arr函数,可以对这些字符串进行冒泡排序。在排序过程中,使用strcmp函数比较字符串的大小,如果前一个字符串大于后一个字符串,则交换它们的位置。最后,通过调用print_arr函数,可以打印出排序后的数组。 综上所述,strcpy函数是C语言中用于复制字符串的函数,可以用来复制二维数组中的元素。在引用和引用中,它们分别展示了将二维数组复制到另一个数组和对二维数组进行排序时的应用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [初学C语言-二维数组与字符数组](https://blog.csdn.net/czh2637750821/article/details/110200445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Day 24 C语言学习 二维字符数组 练习](https://blog.csdn.net/qq_59947178/article/details/126770876)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

慕容离875

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

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

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

打赏作者

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

抵扣说明:

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

余额充值