【问题标题】:Sorting Strings Using qsort to Check If They Are Anagram使用 qsort 对字符串进行排序以检查它们是否是 Anagram
【发布时间】:2018-12-23 01:48:52
【问题描述】:
static int myCompare (const void * a, const void * b)
{
    return strcmp (*(const char **) a, *(const char **) b);
}

void sort1(const char *str1[],int n1)
{
    qsort (str1,n1,sizeof (const char *), myCompare);

}
void sort2(const char *str2[], int n2)
{
    qsort( str2, n2, sizeof (const char *),myCompare);
}

int main ()
{
    const char *str1[] = {"listen"};
    const char *str2[] = {"silent"};

    int n1 = sizeof(str1)/sizeof(str1[0]);
    int n2 = sizeof(str2)/sizeof(str2[0]);

    sort1(str1,n1);
    sort2(str2,n2);

    int x = strcmp(*str1,*str2);

    if(x==0) 
     printf("\n Both The Strings Are Anagram\n");

    else
    printf("\n Strings Are Not Anagram \n"); 
    return 0;
}

我希望对字符串进行排序然后比较它们,以检查它们是否是 Anagram

问题是字符串没有排序

【问题讨论】:

  • 现在是learn how to debug 的好时机。向我们展示您尝试调试它的内容。如果您不知道如何使用调试器,请学习它。作为起点,为什么 str1 和 str2 是一个 char 指针数组?
  • 好吧,您已经对包含一个元素的字符数组进行了排序。由于只有一个元素,因此没有任何变化。您是否打算对这些字符串中的字符进行排序,而不是对数组中的字符数组进行排序?
  • 但是排序不是检查字符串是否是字谜的方法,只要它们由相同的字符组成。要检查它们是否是字谜,请比较长度并向后迭代一个字符串,看看它们是否相同。
  • @KamilCuk 不,你在想回文。
  • @kiner_shah - 是的,这正是我想要做的。

标签: c sorting data-structures


【解决方案1】:

如果您需要通过排序来检查两个字符串是否是字谜,您可以将字符串放在一维字符数组中,例如

char str1[]="silent";
char str2[]="listen";

qsort(str1, strlen(str1), sizeof(str1[0]), cmp);
qsort(str2, strlen(str2), sizeof(str2[0]), cmp);

cmp() 是一个函数

int cmp(const void *a, const void *b)
{
    return *(const char *)a - *(const char *)b;
}

qsort() 调用后,使用strcmp() 喜欢

if(strcmp(str1, str2)==0)
{
    //anagrams
}

了解qsort() herehere


注意在

const char *str1[] = {"listen"};

字符串不能修改,在

的情况下也是如此
char *str1[]={"listen"};

仅在这种情况下,您可能会收到运行时错误,因为它是字符串文字。请参阅this 帖子。

【讨论】:

  • @melpomene 感谢您指出这一点。错过了右括号。已编辑。
  • 这个*(char *)a - *(char *)b;应该是*(const char *)a - *(const char *)b;
猜你喜欢
  • 2018-01-10
  • 2011-04-15
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2013-03-23
  • 2017-01-01
相关资源
最近更新 更多