变量在if语句中有不同的值
Variable has different value in `if` statement
在我的类中我将i
声明为private int i
。
在我的一个类函数中,我声明i = 0
,像这样:
void Expression::tokenize()
{
i = 0;
cout<<"i before is:"<< i <<endl;
strcpy(exp, expression.c_str());
char *p = strtok(exp, " ");
while (p != NULL)
{
if(strcmp(p, "+"))
{
cout<<"i after is:"<< i <<endl;
ops[i] = *p;
};
p = strtok(NULL, " ");
};
}
"i before"的值为0,而"i after"的值则完全不同。
您显然已经找到了具体的问题(并且可能至少相信您已经解决了它)。
这更多的是从如何避免这类问题开始的。您正在将字符串分割成由一个或多个空格分隔的令牌。在c++中,您可以使用类似这样的代码来更简洁地完成此操作:
std::istringstream buffer(expression);
std::string token;
while (buffer >> token) {
if (token == "+")
ops.push_back(token);
您可以使用标准算法进一步清理:
std::istringstream buffer(expression);
std::copy_if(std::istream_iterator<std::string>(buffer),
std::istream_ierator<std::string>(),
std::back_inserter(ops),
[](std::string const &s) { return s=="+"; });
我在这里对你的意图做了一点猜测。就像现在一样,您的代码将每个+
存储到ops[0]
中,因为您从未增加i
,但我猜这是对发布的疏忽或简化,并且您真的打算将它们存储到连续的位置。同样,我猜您真的想要存储任何操作符,所以您可能真的想要一个像这样的lambda表达式:
[](std::string const &s) { return s.find_first_of("+-*/") != std::string::npos; }
相关文章:
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句
- c++:定义if语句中的模板
- C++嵌套的 If 语句中,它无法按预期工作
- 如果条件不相关,我应该更喜欢两个 if 语句而不是 if-else 语句吗?
- 需要有关此 if 语句的帮助
- 转换器练习:跳过 if 语句和 if 语句
- 避免在 C++ 中的 if 语句中递增
- 如果仍然不满足要求,如何使 if 语句重复?
- do while 循环中的 if 语句以 yes 或 no 结尾
- 为什么在此C++代码中触发此 if 语句?
- 如何基于平台在制作文件中制作if语句?
- 在 if 语句中使用 GetKeyState 时,它会跳过条件
- C++ If 语句,从其他语句重复