【发布时间】:2013-12-18 09:06:38
【问题描述】:
我需要在 C 中创建一个函数,它可以确定 2 个字符串是否由相同的单词组成。从当前代码中可以看出,我将每个字符串加载到单独的数组中。我做到了,在数组中有单词,所有单词都是小写字母,每个单词之间只有 1 个空格,并且没有所有非字母字符。我虽然可以对字符串进行排序并对其调用 strcmp ,但不能这样做,因为可能存在诸如 "dog dog dog cat" 和 "dog cat" 之类的字符串,这些字符串来自相同的单词,所以该函数应该返回 1,但如果只是排序并使用 strcmp,它就不会。所以我虽然可以将所有重复的单词合并到1中,然后排序和strcmp,但是还有一个问题,当有“dog”和“god”这样的单词时,它们是2个不同的单词,但是函数排序后仍会将它们视为相同。 “狗狗狗猫”“狗猫” - 相同的词 “嗨,你好!!'”“嗨,,,你好,嗨” - 相同的词 我将非常感谢任何帮助。我真的不知道怎么做,坐了好久还是想不通。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int sameWords( const char * a, const char * b)
{
char * array1=NULL;
char * array2=NULL;
int length1=0, length2=0, i=0, j=0;
while(a[i])
{
if(i>=length1)
{
length1+=250;
array1=(char*)malloc(length1*sizeof(char));
}
if(isspace(a[i]) && !isspace(a[i-1]))
{
array1[i]=a[i];
}
if(isalpha(a[i]))
{
array1[i]=tolower(a[i]);
}
i++;
}
while(b[j])
{
if(j>=length2)
{
length2+=250;
array2=(char*)malloc(length2*sizeof(char));
}
if(isspace(b[j]) && !isspace(b[j-1]))
{
array2[j]=b[j];
}
if(isalpha(b[j]))
{
array2[j]=tolower(b[j]);
}
j++;
}
}
int main()
{
sameWords("This' is string !!! ", "THIS stRing is !! string ");
return 0;
}
【问题讨论】:
-
您应该尝试从字符串 1 中获取每个真实单词,一次一个,然后查看字符串 2 中是否包含它。如果字符串 1 中的所有单词都在字符串 2 中,则对字符串 1 中包含的字符串 2 单词执行相同的操作。不排序,只需检查每个有效单词是否包含在另一个字符串中。如果字符串 1 中的所有有效单词都在字符串 2 中,反之亦然,那么您就有了匹配项。
-
"'dog' 和 'god' 是两个不同的词,但是排序后函数还是一样。" 为什么?
-
好的,谢谢。这也是我在想的,但不知如何实现。如何接一个单词并检查它们是否在另一个字符串中。
-
为什么不实现您对每个 to 字符串的建议:将一个单词的所有出现合并为一个单词并将它们排序,然后比较两个数组。
-
因为那是狗和上帝的事。 Dog 和 God 是不同的词,我认为它会对字母进行排序,所以它是“dgo”,并且在两个数组中都是相同的“dgo”,所以它会将它们比较为相同。