C++ Code 在 for 循环期间不会累积变量中的总和,仅提供最终迭代值
C++ Code does not accumulate sum in variable during for loop and provides only final iteration value
我的问题是变量"scoreA"应该是每次迭代 for 循环期间生成的所有值的累积。但是,我没有获得累积值,而是只在最后一次迭代中获取值。有人可以帮我,因为我是C++新手。我在 for 循环之外定义了 scoreA,所以我的理解是 scoreA 的值应该是所有迭代的累积值。但我的猜测是它被重新分配给 0,因此它无法累积值。
#include<iostream>
#include<map>
#include<string>
using namespace std;
map<string,int> Score_Scheme;
string StringA = "aaaa";
int Score_Compute(string StringA);
int Base_case_A(int lenA);
int main ()
{
Score_Scheme["ac"] = -1;
Score_Scheme["ag"] = -2;
Score_Scheme["at"] = -1;
Score_Scheme["a-"] = -3;
Score_Scheme["cg"] = -3;
Score_Scheme["ct"] = -2;
Score_Scheme["c-"] = -4;
Score_Scheme["gt"] = -2;
Score_Scheme["g-"] = -2;
Score_Scheme["t-"] = -1;
Score_Scheme["--"] = 0;
Score_Scheme["aa"] = 5;
Score_Scheme["cc"] = 5;
Score_Scheme["gg"] = 5;
Score_Scheme["tt"] = 5;
Score_Scheme["ca"] = -1;
Score_Scheme["ga"] = -2;
Score_Scheme["ta"] = -1;
Score_Scheme["-a"] = -3;
Score_Scheme["gc"] = -3;
Score_Scheme["tc"] = -2;
Score_Scheme["-c"] = -4;
Score_Scheme["tg"] = -2;
Score_Scheme["-g"] = -2;
Score_Scheme["-t"] = -1;
int len_StringA = StringA.size ();
cout<<"length of A is:"<<len_StringA<<"n";
Base_case_A(len_StringA);
return 0;
}
int Base_case_A(int lenA)
{
int scoreA = 0;
for(int i = 0;i<lenA;i++)
{
char x[2];
x[0] = StringA[i];
x[1] = '-';
scoreA=scoreA+Score_Compute(x);
cout<<i<<":"<<scoreA<<"n";
}
cout<<scoreA<<"n";
return 0;
}
int Score_Compute(string stringA)
{
return Score_Scheme[stringA];
}
Score_Compute()
将std::string
作为输入,但是当循环调用Score_Compute(x)
时,x
是一个包含 2 个char
值的char[2]
,这两个值都不是空终止符。
当一个char[]
按原样传递给一个std::string
时,char[]
衰减到char*
,然后std::string
假设它是空终止的,而你的不是。
因此,Score_Compute()
接收的std::string
将是错误的,通常在您指定的字符之后包含随机数据(假设代码在搜索不存在的空终止符时不会完全崩溃(,因此它不会匹配std::map
中的任何条目,导致Score_Compute()
返回 0。
要修复逻辑,您需要将x
的声明更改为char x[3];
,然后在转换为std::string
之前添加x[2] = ' ';
:
char x[3]; // <-- fix this!
x[0] = StringA[i];
x[1] = '-';
x[2] = ' '; // <-- add this!
否则,您必须在转换为std::string
时指定正确的长度:
Score_Compute(string(x, 2));
或者,只需将x
更改为std::string
即可:
string x(2, ' ');
x[0] = StringA[i];
x[1] = '-';
或:
string x;
s.resize(2);
x[0] = StringA[i];
x[1] = '-';
或:
string x = " -";
x[0] = StringA[i];
相关文章:
- 如何在 c++ 中将字符串迭代器变量传递给函数?
- C++ Code 在 for 循环期间不会累积变量中的总和,仅提供最终迭代值
- 需要循环帮助以迭代方式添加到程序集中的总和变量
- 迭代器或反向器的一个变量
- ActorItr 迭代器变量中有什么,* ActorItr 返回什么?
- 如何在每次迭代后在循环中获取变量的值?
- 从迭代器转换为变量的类型.(C++11 模板)
- 从 for 循环的每次迭代创建一个新变量
- 增加迭代变量背后的直觉?
- 如何在C++中迭代非常量变量?
- 将多个计算放入使用基于迭代次数的变量的 for 循环中
- 如何将迭代器变量声明为私有成员变量
- 让宏将迭代参数传递到通过宏变量提供的代码体中
- 在每次迭代中显示变量
- C :我可以将成员变量的迭代器带入班级之一
- 为什么我需要在每次迭代使用字符串流变量的循环时清除该变量
- C++ 列表中的对象变量在迭代过程中不会更新
- 作为变量的目录迭代器值
- 迭代:变量和矢量前沿的总和,导出到另一个矢量,擦除矢量前沿
- 如何迭代变量