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 。
问题是字符串未排序。
答案 0 :(得分:3)
如果您需要通过对两个字符串进行排序来检查它们是否为字谜,则可以将这些字符串放在一维字符数组中,例如
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
}
请注意,
const char *str1[] = {"listen"};
不能修改字符串,对于
char *str1[]={"listen"};
仅在这种情况下,您可能会遇到运行时错误,因为它是字符串文字。请参阅this帖子。