我有一堆字符串,看起来像:
'Hello1-FOO'、'Aello2-FOO'、'Bye1-BAR'、'Bye3-BAR'、'Hello22-FOO'、'Bye4-BAR'、'Welcome-BAR' ...
所有这些都存储在一个结构中。
struct str {
char *strings;
}
...
struct str **t_str;
size_t j;
t_str = malloc(sizeof *t_str * 20);
for (j = 0; j < 20; j++)
t_str[j] = malloc(sizeof *t_str[j]);
...
t_str[0]->strings = "Hello1-FOO";
t_str[1]->strings = "Aello2-FOO";
....
我想做的是按类别显示(排序)它们,所以它们看起来类似于:
FOO:
Hello1-FOO
Aello2-FOO
Hello22-FOO
BAR:
Bye4-BAR
Welcome-BAR
Bye1-BAR
Bye3-BAR
基本上按“-”后的标记对它们进行分组
这样做的好方法是什么?处理字符串后我应该将它们存储在第二个结构中吗?任何想法将不胜感激。谢谢
最佳答案
只需使用 qsort
。以下代码做出了一些假设,但您应该能够更改它以满足您的需要。
int categoryComparitor(const void * a, const void * b)
{
char *string1 = (char *)a;
char *string2 = (char *)b;
string1 = strrchr(string1, '-') + 1;
string2 = strrchr(string2, '-') + 1;
return strcmp(string1, string2);
}
{
...
char *strings[]; // Array of string pointers
int stringCount; // Holds current number of valid elements in strings.
...
qsort(strings, stringCount, sizeof(char *), categoryComparitor);
}
关于c - 将字符串分组到结构中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3406889/