对单词进行排序后再输出

本关任务:有一个字符串数组包含9个字符串,每个字符串都是一个单词,且每个串的长度均不超过7,要求对单词进行排序后再输出。具体要求如下:

  1. 使用二维字符数组存放这9个字符串。

2.为二维字符数组输入数据。

3.输出处理前和处理后的字符串数组并进行比较。

输入:

9个字符串,长度小于7。

输出:

打印输出处理前的9个字符串。

打印输出处理后的9个字符串。

注意:这里的排序是排序字符串 总的来说就是按字母的ASCII码从小到大排序 同字母短的在前面(我是这么理解的)

#include <stdio.h>
#include <string.h>
int main()
{
//she its can ibm1 bbc NBA nhk2 BOY jxf 
//c python java c++ android caffe keras pytorch php 
    int N,i,k;
    char j,s[100][100],a[100][100];
    printf("排序前的字符串:\n");
	for(i=0;i<10;i++)
    {
    	scanf("%s",s[i]);//输入
		printf("%s",s[i]);
		if(i<9)
        printf("\n");
    	fflush(stdout);
	}

	for(i=0;i<9;i++)
	{
		k=i;
		for(j=i+1;j<10;j++)
		{
			if(strcmp(s[k],s[j])>0)
			k=j;
		}
		if(k!=i)
		{
			char temp[100];
            strcpy(temp, s[k]);
            strcpy(s[k], s[i]);
            strcpy(s[i], temp);
		}
	}
printf("排序后的字符串:");
for(i=0;i<10;i++)
{
	printf("%s\n",s[i]);
} 	
    return 0;
}

需要注意的是

for(i=0;i<10;i++)
    {
    	scanf("%s",s[i]);//输入
		printf("%s",s[i]);
		if(i<9)
        printf("\n");
    	fflush(stdout);
	}

这一段
i其实是i<9的,如果i<10 dev c++会不读下一个printf
但是如果使用作业平台和别的编译器的话i<10也是可以输出结果的
但是更准确的算法是i<9(助教老师指出的 我自己肯定得试好久OTZ)
这是在我还没加if的时候想的
加了之后有点迷惑 等我有空再想(加if是因为要严格按照平台的输出格式)

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 本关任务:有一个字符串数组包含9个字符串,每个字符串都是一个单词,并且每个串的长度均不超过7,要求对单词进行排序后再输出。具体要求如下: 1. 使用二维字符数组存放9个字符串。 2. 为二维字符数组输入数据。 3. 输出处理前和处理后的字符串数组并进行比较。 注:以上内容均为对题目的翻译和解释,并非答案。 ### 回答2: 本题涉及到字符串的排序和数组的操作,需要使用二维字符数组存放9个字符串,按照题目要求对单词进行排序后再输出。具体步骤如下: 1. 开始时,先定义一个二维字符数组,用于存放9个字符串,其中每个字符串的最大长度为7,可以使用如下代码: char words[9][8]; 2. 接着,通过输入操作,为二维字符数组输入数据,并且可以使用循环语句实现,如下所示: for(int i = 0; i < 9; i++) { printf("请输入第%d个字符串:", i+1); scanf("%s", words[i]); } 3. 然后,按照题目要求,对单词进行排序,可以使用冒泡排序或快速排序等算法,这里举例使用冒泡排序,如下所示: for(int i = 0; i < 9; i++) { for(int j = i + 1; j < 9; j++) { if(strcmp(words[i], words[j]) > 0) { // 交换两个单词的位置 char tmp[8]; strcpy(tmp, words[i]); strcpy(words[i], words[j]); strcpy(words[j], tmp); } } } 4. 最后,输出处理前和处理后的字符串数组并进行比较,如下所示: // 输出处理前的字符串数组 printf("处理前的字符串数组为:\n"); for(int i = 0; i < 9; i++) { printf("%s ", words[i]); } printf("\n"); // 输出处理后的字符串数组 printf("处理后的字符串数组为:\n"); for(int i = 0; i < 9; i++) { printf("%s ", words[i]); } printf("\n"); 从输出结果可以看出,处理前和处理后的字符串数组进行了比较和排序,符合题目要求。 ### 回答3: 本题需要使用二维字符数组来存放这9个字符串。二维数组是由多个一维数组按照一定的顺序排列而成的,也就是说,我们可以定义一个9行,7列的二维字符数组,每一行代表一个单词,每一列代表单词中的一个字符。 为了输入数据,我们可以使用循环语句逐一为每个字符串的每个字符赋值,例如: char words[9][7]; for(int i=0; i<9; i++){ for(int j=0; j<7; j++){ scanf("%c", &words[i][j]); if(words[i][j] == '\n') break; //输入完一行就停止,防止输入过多数据 } } 这样我们就可以逐一输入每个单词了。为了方便比较处理前和处理后的字符串数组,我们需要再定义一个字符串数组,将二维数组的每个单词拼接成一个完整的字符串,例如: char before[100], after[100]; //定义一个100个字符长度的字符串数组 for(int i=0; i<9; i++){ strcat(before, words[i]); //将二维数组中的单词逐一拼接成字符串 } strcpy(after, before); //拷贝一份before数组,用于排序后的字符串数组 为了对单词进行排序,可以使用字符串排序函数qsort(),例如: int cmp(const void *a, const void *b){ //比较函数,用于qsort()排序 return strcmp(*(char **)a, *(char **)b); } char *sorted[9]; for(int i=0; i<9; i++){ sorted[i] = words[i]; //将二维数组中的每个单词拷贝到一个字符指针数组中 } qsort(sorted, 9, sizeof(char *), cmp); //按照单词的字典序进行排序 最后,我们可以使用printf()函数输出处理前和处理后的字符串数组,并进行比较,例如: printf("处理前:\n%s\n", before); //输出处理前的字符串数组 for(int i=0; i<9; i++){ printf("%s ", words[i]); //逐行输出二维字符数组中的单词 } printf("\n处理后:\n%s\n", after); //输出处理后的字符串数组 for(int i=0; i<9; i++){ printf("%s ", sorted[i]); //逐行输出排序后的字符串数组 } printf("\n"); 这样就完成了对字符串数组的排序和比较,本题完成。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值