我有一个函数counter(string s1, string s2)
,它接受两个字符串(大小为4)作为参数。当s1
是用户输入时,s2
是随机生成的。
int counter(string s1, string s2){
int count = 0;
int i, j;
if(i != j){
for(i = 0; i < 4; i++){
for(j = 0; j < 4; j++){
if(s2[i] != s2[j] && s2[j] == s1[i]){
count += 1;
}
}
}
}
return count;
}
此功能的作用是将s2
与s1
的每个元素进行比较。如果s2
的元素等于s1
的元素,只要它们没有相同的索引或位置,count
增加1.但是,函数在遇到问题时会遇到问题。 s2
包含重复项。例如,如果s1 = 1234
和s2 = 4445
,则输出应为1
,但我的程序会输出3
。我应该如何检测字符串中的重复项?
忘了提这个,但是s1(随机生成的字符串)有不同的字符。
答案 0 :(得分:0)
我敢说。但是我把你的问题弄坏了我的问题=)
int counter(string s1, string s2){
int count = 0;
for(int i = 0; i < s1.length(); ++i)
{
string::size_type loc = s2.find(s1[i], 0);
while (loc != string::npos)
{
if(loc != i)
++count;
loc = s2.find(s1[i], loc + 1);
}
}
return count;
}
答案 1 :(得分:0)
在for循环中添加if条件,
int counter(string s1, string s2){
int count = 0;
int i, j;
for(i = 0; i < 4; i++){
for(j = 0; j < 4; j++){
if(i!=j && s2[j] == s1[i]){
count += 1;
}
}
}
}
return count;
}
答案 2 :(得分:0)
这样可以解决S2中多次出现相同字母时遇到的问题。
int counter(string s1, string s2){
int count = 0;
int i, j;
for(i = 0; i < 4; i++){
for(j = 0; j < 4; j++){
if(i != j){
if(s2[j] == s1[i]){
count += 1;
break; // Break out of inner for-loop
// to avoid counting letters twice
}
}
}
}
return count;
}
但是,我不确定你希望程序在S1中多次出现相同的字母时要做什么。
编辑: 在阅读了评论中的一些说明之后,if语句应该是
if(s2[i] != s2[j] && s2[j] == s1[i]){
像在原帖中一样。
答案 3 :(得分:0)
您可以通过实施 Levenshtein距离算法来检测重复元素。
int levenshtein(const char *s, int ls, const char *t, int lt){
int a, b, c;
/* if either string is empty, difference is inserting all chars
* from the other
*/
if (!ls) return lt;
if (!lt) return ls;
/* if last letters are the same, the difference is whatever is
* required to edit the rest of the strings
*/
if (s[ls] == t[ls])
return levenshtein(s, ls - 1, t, lt - 1);
/* else try:
* changing last letter of s to that of t; or
* remove last letter of s; or
* remove last letter of t,
* any of which is 1 edit plus editing the rest of the strings
*/
a = levenshtein(s, ls - 1, t, lt - 1);
b = levenshtein(s, ls, t, lt - 1);
c = levenshtein(s, ls - 1, t, lt );
if (a > b) a = b;
if (a > c) a = c;
return a + 1;}