#include <stdio.h>
#include <string.h>
#include <stdlib.h>
static int comp(const void *a, const void *b);
int main(int argc, char ** argv)
{
char s1[]="";
char s2[]="";
char *fmt = "%[^\n]%*c";
printf("Enter the first word? ");
scanf(fmt,&s1);
printf("Enter the second word? ");
scanf(fmt,&s2);
qsort(s1, strlen(s1), 1, comp);
qsort(s2, strlen(s2), 1, comp);
printf("%s : %s - %s\n", s1, s2, strcmp(s1, s2) ? "No" : "Yes");
return 0;
}
static int comp(const void *a, const void *b)
{
const char *pa = (char*)a;
const char *pb = (char*)b;
return
(*pa > *pb) ? 1 :
(*pa < *pb) ? -1 :
0;
}
当我键入“smartest”作为我的第一个字符串并键入“mattress”作为我的第二个字符串时,我的输出变为
emrsstt : aemrsstt - No
为什么字符串的第一个字符丢失?
我已经在这上面坐了好几个小时了。如果有人能指出我可能犯的愚蠢错误,我将不胜感激。
最佳答案
一个聪明的方法是首先检查可能的字谜。您可以通过
执行此操作比较字符串长度。
对总集合中的每个
字符
进行异或;从两个字符串中提取。
如果 (2) 的结果不为零,则字符串不可能是字谜词。这样做的优点是 (2) 在 c 中速度非常快,而且大多数字符串都不是字谜,即使它们长度相同。如果您感觉特别雄心勃勃,您可以将 (1) 和 (2) 组合成一个 O(N) 算法!
完成后,调用您的主代码体。您的问题是不允许每个字符串上有 null 终止符。您需要为字符串字符分配足够的空间,并为空终止符分配一个额外的元素。
关于c - 确定两个字符串是否是字谜?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26912871/