c - 将字符串分组到结构中

标签 c string struct

我有一堆字符串,看起来像:

'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/

相关文章:

c - 使用飞思卡尔塔板的简单计算器

c - 将指针转换为 void 指针并写入它是 UB 吗?

c - 传递指针数组并打印它们的问题

string - 在 Perl 中存储对字符串的套接字响应

c# - 为什么运算符 '==' 不能应用于结构和默认值(结构)?

c - 'sizeof' 对不完整类型的无效应用

C循环跳过输入迭代

python - 我正在尝试从 python 正则表达式解析字符串 - 当字符串包含 ":"时无法解析

c++ - 如何在 C++ 字符串中填充一个部分?

c - C中的结构使用指针