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

C++ 如何比较显示差异数量的字符串,c++,string,C++,String,我是编程新手,如果我的问题很难理解,我很抱歉 我有一个字符串模型的答案 string modelAnswer = "ABABACDA"; 所以它应该是一个测验的答案,我试图让它,如果用户的输入是正确的 string studentAnswer=“abadbb”例如,当studentAnswer字符串的前三个字母与modelAnswer匹配时,程序将显示我得到3分。使用stringstream,您可以一次将一个字符推入临时变量,并在循环中测试等效性 #include <iostream&g

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

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

string modelAnswer = "ABABACDA";
所以它应该是一个测验的答案,我试图让它,如果用户的输入是正确的
string studentAnswer=“abadbb”例如,当studentAnswer字符串的前三个字母与modelAnswer匹配时,程序将显示我得到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;
}
#包括
#包括
#包括
int main(){
标准::istringstream模型(“ABABACDA”);
std::istringstream学生(“ABADBB”);
int-diff=0;
charm,s;
而((模型>>m)和&(学生>>s))
如果(m!=s)diff++;

std::cout例如,您可以使用标准算法
std::internal\u 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;
}
#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 <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;
}
#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;
}
#包括
#包括
#包括
#包括
#包括
#包括
int main()
{
std::string modelAnswer(“ababada”);
std::string studentAnswer(“abadbb”);
自动n=std::内部产品(modelAnswer.begin(),
std::next(modelAnswer.begin(),std::min(modelAnswer.size(),studentAnswer.size()),
学生回答。开始(),大小为(0),
std::plus(),std::equal_to());

std::cout如果您使用的是标准字符串,使用适当的include(主要是
#include
),您可以编写一个简单的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);

遍历字符串并比较每个元素。你可以逐字符比较两个字符串。你可以在循环中使用,直到它返回结束迭代器,以找到差异集。当你想到这个问题时,你想到了什么?如果学生没有给出足够的答案会发生什么?你没有计算这些空格。这不是cl听我说为什么使用
stringstream
在这里是一个优势。哇,很有洞察力(除了使用
std::endl
)。我在考虑
count\u if
和lambda,但这要好得多。@PeteBecker计数算法家族常用的替代方法是std::accumulate和std::inner\u乘积.)