输入10个等长字符串,排序然后输出

文章对比了两个C语言函数sortc和sortc2,分别通过指针数组和字符数组进行字符串排序。sortc交换的是指针,不改变字符串内容;sortc2则交换字符串内容本身。
摘要由CSDN通过智能技术生成
void sortc(char *p[])
{
	//利用指针数组 
	int i = 0,j = 0;
	char** temp;//指向字符串指针的指针
	for (i = 0; i < 10 - 1; i++)
	{
		for (j = 0; j < 10 - i - 1; j++)
		{
			if (strcmp(p[j], p[j+1]) > 0)
			{
				//没有改变字符串本身的内容,也没有移动字符串在内存中的位置。
				//我们只是改变了指针数组 p 中指针的指向,使它们指向了不同的字符串。
				temp = p[j];
				p[j] = p[j + 1];
				p[j + 1] = temp;
			}
		}
	}
}
void sortc2(char (*p)[4])
{
	//利用数组指针 
	int i = 0,j = 0;
	char c[10],*temp=c;//指向 字符串 
	for (i = 0; i < 10 - 1; i++)
	{
		for (j = 0; j < 10 - i - 1; j++)
		{
			if (strcmp(p[j], p[j+1]) > 0)
			{
				strcpy(temp,p[j]);//交换字符串内容 
				strcpy(p[j],p[j+1]);
				strcpy(p[j+1],temp);
			}
		}
	}
}
int main()
{

int i=0;
	//char *p[10]={"abc","def","ghi","jkm","nop",
	//			"qst","uvw","xyz","aaa","vvv"};
	char str[10][4]={"abc","def","ghi","jkm","nop",
				"qst","uvw","xyz","aaa","vvv"};
	char (*p)[4];
	p=str;
	printf("调换前:\n");
	for(i=0;i<10;i++)
		printf("%s\n",str[i]);
	sortc2(p);
	printf("\n调换后:\n");
	for(i=0;i<10;i++)
		printf("%s\n",str[i]);



return 0;
}

sortcsortc2这两个函数中,p[j]的基本作用都是用来访问字符串数组中的第j个字符串,但是它们所指向的字符串的存储方式有所不同,这导致了在交换字符串时处理方式的不同。

sortc中:

void sortc(char *p[]) {  
    // ...  
    if (strcmp(p[j], p[j+1]) > 0) {  
        // 交换两个指针的值  
        char *temp = p[j];  
        p[j] = p[j+1];  
        p[j+1] = temp;  
    }  
    // ...  
}


这里的p是一个指向字符指针的指针char *p[]或等价地char **p),它指向一个字符串指针数组。因此,p[j]的类型是char *,即一个指向字符的指针,它指向动态分配的内存中的某个字符串。在sortc中,我们直接交换了这些指针的值,而不是字符串的内容。这意味着我们改变了指针数组p中指针的指向,但并没有改变字符串本身在内存中的位置或内容。

sortc2中:

void sortc2(char (*p)[4]) {  
    // ...  
    if (strcmp(p[j], p[j+1]) > 0) {  
        // 交换两个字符串的内容  
        strcpy(temp, p[j]);  
        strcpy(p[j], p[j+1]);  
        strcpy(p[j+1], temp);  
    }  
    // ...  
}


这里的p是一个指向字符数组的指针char (*p)[4]),它指向一个包含固定大小字符数组的数组。因此,p[j]的类型是char[4],即一个包含4个字符的数组。在sortc2中,我们通过strcpy函数来交换两个字符串的内容。这意味着我们复制了字符串的实际字符,从一个位置到另一个位置,而不是改变指针的指向。

总结来说,sortc中的p[j]是指向动态分配字符串的指针,而sortc2中的p[j]是指向固定大小字符数组的引用。在sortc中,我们交换指针;在sortc2中,我们交换字符串内容。这两种方法都实现了字符串数组的排序,但处理字符串的方式不同。

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值