gpt4 book ai didi

c - 确定两个字符串是否是字谜?

转载 作者:行者123 更新时间:2023-11-30 17:26:01 25 4
gpt4 key购买 nike

#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 

为什么字符串的第一个字符丢失?

我已经在这上面坐了好几个小时了。如果有人能指出我可能犯的愚蠢错误,我将不胜感激。

最佳答案

一个聪明的方法是首先检查可能的字谜。您可以通过

执行此操作
  1. 比较字符串长度。

  2. 对总集合中的每个字符进行异或;从两个字符串中提取。

如果 (2) 的结果不为零,则字符串不可能是字谜词。这样做的优点是 (2) 在 c 中速度非常快,而且大多数字符串都不是字谜,即使它们长度相同。如果您感觉特别雄心勃勃,您可以将 (1) 和 (2) 组合成一个 O(N) 算法!

完成后,调用您的主代码体。您的问题是不允许每个字符串上有 null 终止符。您需要为字符串字符分配足够的空间,并为空终止符分配一个额外的元素。

关于c - 确定两个字符串是否是字谜?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26912871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com