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乘积.)