【发布时间】:2016-06-17 10:55:00
【问题描述】:
我有以下函数,我想测试这两个字符串是否是字谜。我想到的一种方法是将字符串中每个字符的值相加,然后比较它们的值。
但是,当我尝试运行我的程序时,我在两个 for 循环中都遇到了分段错误。我没有正确理解这一点,我的代码中有什么不正确的地方吗?
int anagram(char *a, char *b)
{
int sum1 = 0;
int sum2 = 0;
char *p, *q;
for (p=a; p != '\0'; p++) {
sum1 += *p - 'a';
}
for (q=b; q != '\0'; q++) {
sum2 += *q - 'a';
}
if ( sum1 == sum2 )
return 1;
else
return 0;
}
【问题讨论】:
-
应该是
*p != '\0'和*q != '\0'。由于p和q不是 NULL 指针,因此您的循环是无限循环。 -
@Barmar 我的意思是,如果我为字符串 a 输入 hello,为字符串 b 输入 loleh,我将返回 1
-
复制字符串,对它们进行排序,然后查看它们是否相等。
-
或使用counting sort。换句话说,创建每个单词中字母的直方图,然后验证直方图是否相同。
-
不要求和,计数字符的出现并比较计数。另一种方法是将素数与每个字符相关联,然后将它们相乘。不过,为此,使用 C 内置数据类型肯定不够大。
标签: c string char segmentation-fault int