C++程序报错:lvalue required as left operand of assignment(第20行)求助
修复C++程序中的"lvalue required as left operand of assignment"错误
直接解决第20行的编译错误
你遇到的编译错误根源有两个:
- 错误地将比较运算符
==写成了赋值运算符=,赋值操作不能作为if条件的判断逻辑 a[i]是单个char类型字符,你用双引号包裹的字符串常量(如"0",类型为const char*)进行比较,类型不匹配。应该使用单引号包裹的字符常量(如'0')
原第20行的判断可以简化为更高效的范围检查:
if (c >= '0' && c <= '9')
代码中其他的逻辑Bug和修复
除了编译错误,你的代码还有多处逻辑问题,完全无法实现“提取数字并找不改变顺序的最大三位数”的需求,以下是完整修复方案:
完整修正代码
#include <iostream> #include <string> #include <vector> #include <fstream> using namespace std; int main() { string a; ifstream input("D:\\C++\\Tim so\\Bai1\\input.inp"); ofstream output("D:\\C++\\Tim so\\Bai1\\output.out"); input >> a; vector<char> digits; // 提取字符串中的所有数字字符 for (char c : a) { if (c >= '0' && c <= '9') { digits.push_back(c); } } int max_num = -1; // 遍历所有连续三位的数字组合(保持原顺序) int digit_count = digits.size(); if (digit_count >= 3) { for (int i = 0; i <= digit_count - 3; ++i) { // 将字符转换为整数数值 int current_num = (digits[i] - '0') * 100 + (digits[i+1] - '0') * 10 + (digits[i+2] - '0'); if (current_num > max_num) { max_num = current_num; } } cout << max_num << endl; output << max_num << endl; } else { cout << "提取到的数字不足三位" << endl; output << "提取到的数字不足三位" << endl; } input.close(); output.close(); return 0; }
关键修复点说明
- 容器类型优化:将
vector<string>改为vector<char>,单个数字字符用char存储更合理,避免不必要的内存开销 - 遍历逻辑修正:用
size()代替capacity()获取实际元素数量,capacity()是容器已分配的内存容量,不等于实际元素数 - 核心逻辑重写:遍历所有连续的三位数字组合,计算其对应的整数值,记录最大值,完全符合“不改变数字顺序找最大三位数”的需求
- 边界处理:增加了数字不足三位的判断,避免越界访问并给出明确提示
- 文件操作优化:用
ofstream专门处理文件写入,比fstream更贴合场景,最后显式关闭文件(规范操作)
内容的提问来源于stack exchange,提问作者Bruh
相关产品推荐
相关产品推荐

