如何比较显示差异数的字符串

How to compare strings that shows number of differences

本文关键字:字符串 显示 何比较 比较      更新时间:2023-10-16

我是编程新手,所以如果我的问题难以理解,我很抱歉。

我有一个字符串模型这样的答案

string modelAnswer = "ABABACDA";

所以它应该是测验的答案,我正在尝试使它,如果用户的输入是 例如string studentAnswer = "ABADBDBB";程序将显示我得到了 3 分,因为 studentAnswer 字符串的前三个字母与 modelAnswer 匹配。

您可以使用

标准算法std::inner_product

例如
#include <iostream>
#include <string>
#include <numeric>
#include <functional>
int main() 
{
    std::string   modelAnswer( "ABABACDA" );
    std::string studentAnswer( "ABADBDBB" ); 
    auto n = std::inner_product( modelAnswer.begin(), modelAnswer.end(),
                                 studentAnswer.begin(), size_t( 0 ),
                                 std::plus<size_t>(), std::equal_to<char>() );
    std::cout << n << std::endl;

    return 0;
}

程序输出为

3

假定字符串具有相同的长度。否则,应使用 less 字符串作为第一对参数。

例如

#include <iostream>
#include <string>
#include <numeric>
#include <algorithm>
#include <functional>
#include <iterator>
int main() 
{
    std::string   modelAnswer( "ABABACDA" );
    std::string studentAnswer( "ABADBDBB" ); 
    auto n = std::inner_product( modelAnswer.begin(), 
                                 std::next( modelAnswer.begin(), std::min( modelAnswer.size(), studentAnswer.size() ) ),
                                 studentAnswer.begin(), size_t( 0 ),
                                 std::plus<size_t>(), std::equal_to<char>() );
    std::cout << n << std::endl;

    return 0;
}

如果您使用的是标准字符串,并且具有适当的包含(主要是 #include <string>(,则可以编写一个简单的 for 循环来迭代每个字符,并比较它们。

std::string answer = "ABABACDA";
std::string stringToCompare = "ABADBDBB";
int score = 0;
for (unsigned int i = 0; (i < answer.size()) && (i < stringToCompare.size()); ++i)
{
  if (answer[i] == stringToCompare[i])
  {
    ++score;
  }
}
printf("Compare string gets a score of %d.n", score);

上面的代码对我有用,打印以下结果:

Compare string gets a score of 3.

使用stringstream,您可以一次将一个字符推送到临时变量中,并在循环中测试等效性。

#include <iostream>
#include <string>
#include <sstream>
int main() {
    std::istringstream model("ABABACDA");
    std::istringstream student("ABADBDBB");
    int diff = 0;
    char m, s;
    while ((model >> m) && (student >> s))
        if (m != s) diff++;
    std::cout << diff << std::endl; // 5
    return 0;
}