【问题标题】:Alphabetically arranged to not alphabetical in C在 C 中按字母顺序排列以不按字母顺序排列
【发布时间】:2020-03-29 04:15:32
【问题描述】:

我必须编写一个程序来连接具有相同首字母的字符串,但问题是如果我输入

示例输入:苏打水、吐司、盐、茶

输出总是:

输出:苏打水、烤面包

但我想要的输出是:

苏打盐、吐司茶

我如何保持我的代码的功能,唯一的变化是不按字母顺序排列?

#include<stdio.h>
#include<string.h>
#include <ctype.h>

int main()
{
    char str1[100][100], str[1000], temp[100];
    int n, i, j;
    char *ptr, *ptr1, letter;

    printf("Enter how many arrays: ");
    scanf("%d", &n);

    for(i=0; i<n; i++)
    {
        printf("Enter string %d: ", i+1);
        scanf("%s", &str1[i]);
    }

    for(i=0; i<n-1; i++)
    {
        for(j=i+1; j<n; j++)
        {
            if(strcasecmp(str1[i], str1[j])>0)
            {
                strcpy(temp, str1[i]);
                strcpy(str1[i], str1[j]);
                strcpy(str1[j], temp);
            }
        }
    }

    for(i=0; i<n; i++)
    {
        if (i != 0)
        {
            if (tolower(str1[i][0]) != tolower(letter))
            {
                printf(",");
            }
        }
        {
            printf("%s", str1[i]);
            letter = str1[i][0];
        }
    }
}

【问题讨论】:

    标签: c string sorting string-concatenation


    【解决方案1】:

    在我看来,您似乎只想对第一个字母进行排序,并保持输入中单词的相对顺序。

    一种可能的方法(就在我的脑海中)可能是多次排序并使用 indexes 代替。

    一旦您读取了输入,您就可以为str1 数组创建一个索引数组。它将开始有序(即indexarray[0] 将引用str1[0],因此具有值0 等)。然后使用这个索引数组进行排序,交换其中的索引(即交换indexarray[i]indexarray[j])。

    完成后,您基本上应该拥有您已经拥有的东西。但随后您进行另一次排序,这次对索引数组本身进行排序,但不是完全排序,仅在单词的第一个字母相同的范围内(即str1[indexarray[i]][0] == str1[indexarray[j]][0]) .


    一些例子:使用与您的问题相同的输入,然后indexarray 看起来像这样

    indexarray[0] == 0 // 苏打水 indexarray[1] == 1 // 吐司 indexarray[2] == 2 // 盐 indexarray[3] == 3 // 茶

    在第一次排序后它看起来像

    indexarray[0] == 2 // 盐 indexarray[1] == 0 // 苏打水 indexarray[2] == 3 // 茶 indexarray[3] == 1 // 吐司

    然后在第二遍之后,您对索引数组进行多个部分排序(每个部分排序将只对单词的特定首字母进行排序),然后数组看起来像

    indexarray[0] == 0 // 苏打水 indexarray[1] == 2 // 盐 indexarray[2] == 1 // 吐司 indexarray[3] == 3 // 茶

    就像我说的那样,这只是我的想法,我没有任何代码(真实的或伪的)要展示,但希望它对于一些想法来说已经足够了。

    【讨论】:

      最近更新 更多