C++ 使用结构向量c++;
我有一个程序,我想从字符串中更新一个变量。函数将读取一个字符串,找出它是否是加法、减法等,然后将其添加到变量中。其功能是:C++ 使用结构向量c++;,c++,assertion,C++,Assertion,我有一个程序,我想从字符串中更新一个变量。函数将读取一个字符串,找出它是否是加法、减法等,然后将其添加到变量中。其功能是: using namespace std; struct variable{ string name; int value; }; void update_varabile(string line, vector<variable> & v) { char c = line[0]; //variable to be
using namespace std;
struct variable{
string name;
int value;
};
void update_varabile(string line, vector<variable> & v)
{
char c = line[0]; //variable to be updated
string b;
char d[0];
int flag = 0; //counter
int a = 0;
int temp_value = 0;
int perm_value = 0;
for (int i = 0; i < v.size(); i++) {
if (c == v[i].name[0]) {
flag = 1;
temp_value = v[i].value;
break;
}
}
if (flag == 1) { //variable is present
for (int i = 0; i< line.size(); i++) {
if (line[i] == '+'|| line[i] =='-'|| line[i] == '*'|| line[i] =='/') {
b[0] = line[i+1]; //assuming the integer is between 0 and 9
d[0] = b[0];
a = atoi (d);
if (line [i] == '+') {
perm_value = temp_value + a;
} else if (line [i] == '-') {
perm_value = temp_value - a;
} else if (line [i] == '*') {
perm_value = temp_value * a;
} else if (line [i] == '/') {
perm_value = temp_value / a;
}
}
}
for (int i = 0; i < v.size(); i++) {
if (v[i].name[0] == 'c') {
v[i].value = perm_value;
break;
}
}
}
}
我已经逐行运行了调试器,它显示函数正确执行。我还试图在我的计算机上查找该C:/文件,但它不存在。不知道为什么这不起作用。首先,摆脱所有的休息。在每个case语句结束时,只使用C++中的断点。让我几乎不可能通过一系列中断来阅读代码,因为我必须下去找出每一个中断是什么以及为什么。如果您需要尽早退出for循环,那么使用while循环。您不需要在if和else语句末尾加上中断,因为它们会导致程序提前离开函数,如果您使用if、else if和else条件格式,if和else语句将自然跳过 话虽如此,你需要更好地分解你正在尝试做的事情。 例如,您将获得如下字符串值。 2+3+4-5+6 您的程序将从左向右读取。我假设你想让它取第一个值,也就是2,然后加上3,然后再加上4,依此类推,第四个 方法是首先解析字符串中的int值,然后解析加法和减法值。换句话说,从字符串中读取int值,直到找到一个不在0和9之间的值。然后查看该非数值是否是您要查找的运算符。这样您的程序就不会在2555和2这样的值上出错 即
//intValueHolder是一个字符串。
而(i='0'&&line[i]谢谢你的回答。这是给学校的,我不想找人重写它;我只是想了解发生了什么。我们可以假设只会添加一个整数,因为我正在测试这个函数以获得更大的任务。因此,我不必担心添加“34+56-9”之类的内容。它只需要处理一个简单的语句,如“c=c+2”,根据调试器,我认为它可以做到。因此,对于“c=c-3”这样的语句,上面的格式将是相同的。如果这能为您指明正确的方向。好吧,那么您基本上是在用main中的值替换c?请澄清特定输入的预期输出应该是什么。因此,如果您输入的是“c=c-3”您希望返回什么?这样我可以看到错误发生的地方。另外,请停止中断,这是一个不好的编程习惯,我是根据经验说的。我在我的程序中去掉了它们,谢谢您告诉我。因此,我在main中设置了val=0,这个程序将读取表示“c=c+2”的字符串,找到“+”,然后知道在+(在本例中是数字2)之后添加任何内容,然后更新变量c。因此,在最后,如果我打印出c的值,它将是2。如果语句是“c=c-3”,它将从0中减去3,因此将打印-3。如果您不担心垃圾或其他值,只需在中遍历字符串,直到遇到符号,然后字符串的其余部分放入另一个字符串并在其上运行atoi。就这么简单。然后运行您需要的任何操作。
int main()
{
variable a;
int val = 0;
string up = "c=c+2";
string f = "c";
vector<variable> q;
a.name = f;
a.value = val;
q.push_back(a);
update_varabile(up, q);
return 0;
}
Assertion failed: ((m_->valid == LIFE_MUTEX) && (m_->busy > 0)), file C:/crossdev/src/winpthreads-git20141130/src/mutex.c, line 57
Process returned 1 (0x1) execution time : 0.014 s
Press any key to continue.
//intValueHolder is a string.
while(i < line.size() && line[i] >= '0' && line[i] <= '9' ) {
intValueHolder.push_back(string[i]);
}