-2

我正在尝试根据字符串中的字符数进行字符串排序。我所做的是从用户那里获取 5 个输入字符串并将它们存储在 5 个数组元素中,然后使用strlen(). 现在我将strlen(i)i = 0 到 4 的输出存储在一个数组中,我需要使用任何排序算法对该数组进行排序。我的代码直到找到每个字符串的长度是:

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

int main()
{
    int i;
    char *p[5];  //array of integer pointing to string
    int x[5];    //integer array to store output of strlen()
    printf("Enter the strings to be sorted");

    for(i=0;i<=4;i++)
    {
        p[i]=calloc(100,1);
        scanf("%99s\n",p[i]);  //for getting and storing user input i.e string.
    }
    for(i=0;i<=4;i++)
    {
        printf("enetered  [%d] string is = %s : String size = %d\n",i, p[i], (int) strlen(p[i])); //for printing the string and its length
    }
    for(i=0;i<=4;i++)
    {
        x[i]=strlen(p[i]); //for storing the length of string in array
    }

    for(i=0;i<=4;i++)
    {
        printf("%d\n",x[i]);
    }
#ifdef OLD
    for(i=0;i<=4;i++)
    {
        x[i]=p[i];
    }
    for(i=0;i<=4;i++)
    {
        printf("%s\t %d\n",x[i],strlen(x[i]));
    }
#endif
    return 0;
}

假设x[0]对应字符串p[0]的长度,x[1]到p[1]等类似;由于 x[i] 是一个整数数组,因此可以对其进行排序。现在有什么方法可以让我对整数数组进行排序时,通过某些代码与整数数组耦合的字符串也会被打乱和排序。

我试图找到一种以另一种方式实现这一点的方法,尽管我仍然是初学者,也是初学者。除此之外,如果有人可以建议我任何用于字符串排序的通用算法。

我的第二个问题是是否有人可以建议根据字符串中的字符数对字符串进行排序。

4

2 回答 2

1

你不能直接做你想做的事,但你可以用structs 实现类似的东西。

不是两个数组,而是一个结构数组。结构定义如下:

struct
{
    char* p;        // Will contain the string pointer
    size_t pLength; // Length of the string
} StringDescriptor;

#define NUM_STRINGS 5
struct StringDescriptor strings[NUM_STRINGS];

像这样初始化:

for (int i = 0 ; i < NUM_STRINGS ; ++i)
{
    strings[i].p = calloc(100, sizeof(char));
    scanf("%99s\n", strings[i].p);
    strings[i].pLength = strlen(strings[i].p);
}

现在您想使用qsort()对数组进行排序。首先,您为您的结构定义一个比较器。

int stringDescriptorComparator(const struct StringDescriptor* left, const struct StringDescriptor* right)
{
    return left->pLength - right->pLength;
}

现在您可以运行 qsort。

qsort(strings, NUM_STRINGS, sizeof(struct StringDescriptor), stringDescriptorComparator);

现在您的结构以及其中的字符串指针将按长度升序排列。也就是说,如果上面的代码片段中没有错误,它们将会是 - 我什至没有尝试编译任何它。

于 2013-06-20T15:09:16.000 回答
0

您可以通过在您希望成为字符串的新最后一个字符的字符后写入一个空字节来截断字符串。例子:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char *str = strdup("Hello, world!");
    printf("%s\n", str);

    str[5] = 0; /* length of str is now 5 */

    printf("%s\n", str);
    free(str);
    return 0;
}

输出:

你好世界!

你好

于 2013-06-20T13:22:01.673 回答