【发布时间】:2014-11-15 16:22:07
【问题描述】:
我正在构建一个用于拼写纠正的小项目,这不是家庭作业。
给定两个字符串 str1 和 str2。必须找出两个字符串之间匹配的字符数。
例如,如果 str1 = "assign" 和 str2 = "assingn",则输出应为 6。
在str2中,字符“a”、“s”、“s”、“i”、“g”、“n”在str1、“assign”中。因此输出应该是 6。
如果 str1 = "sisdirturn" 和 str2 = "disturb",则输出应为 6。
在str2中,字符“d”、“i”、“s”、“t”、“u”、“r”在字符串str1、“sisdirturn”中。因此输出应该是 6。
我尝试了很多次,但我无法得到答案。请帮助解决这个问题,如果有任何改进的想法,请告诉。
这是我目前的尝试:
int char_match (string str1, string str2)
{
//Take two strings, split them into vector of characters and sort them.
int i, j, value = 0;
vector <char> size1, size2;
char* cstr1 = new char[str1.length() + 1];
strcpy(cstr1, str1.c_str());
char* cstr2 = new char[str2.length() + 1];
strcpy(cstr2, str2.c_str());
for(i = 0, j = 0 ; i < strlen(cstr1), j < strlen(cstr2); i++, j++)
{
size1.push_back( cstr1[i] );
size2.push_back( cstr2[j] );
}
sort (size1.begin(), size1.end() );
sort (size2.begin(), size2.end() );
//Start from beginning of two vectors. If characters are matched, pop them and reset the counters.
i = 0;
j = 0;
while ( !size1.empty() )
{
out :
while ( !size2.empty() )
{
if (size1[i] == size2[j])
{
value++;
pop_front(size1);
pop_front(size2);
i = 0;
j = 0;
goto out;
}
j++;
}
i++;
}
return value;
}
【问题讨论】:
-
你能解释一下“匹配的字符数”是什么意思吗?特别是在这种情况下,匹配意味着什么?
-
@Veritas 例如,如果 str1 = "assign" 和 str2 = "assingn",则输出应为 6。在 str2 中,字符、"a"、"s"、"s"、" i", "g", "n" 在 str1, "assign" 中。因此输出应为 6。如果 str1 = "sisdirturn" 和 str2 = "disturb",则输出应为 6。在 str2 中,字符、"d"、"i"、"s"、"t"、"u" , "r" 在字符串 str1, "sisdirturn" 中。因此输出应该是 6。
-
如果你有字符串 "a" 和 "aaa" 应该返回 1 还是 3?
标签: c++ string spell-checking