C++实现游程编码时调用to_string后为何要加[0]下标?
报错根本原因
核心问题是参数类型不匹配:
- 你声明的
encString是vector<char>类型,它的push_back方法仅接收char类型(单个字符)参数。 to_string(runLength)的返回值是std::string类型,属于完整的字符串对象,不是单个字符。将整个string对象传入要求char参数的接口,类型完全不兼容,编译器自然会抛出大量冗长的类型匹配报错。
加[0]后可正常编译的原因
你的代码逻辑里通过runLength == 9的判断把连续游程的最大长度限制在了9,因此runLength的取值永远是1~9的个位数:
- 此时
to_string(runLength)生成的字符串长度固定为1,仅包含一个对应数字的字符 - 对string使用
[0]是取字符串下标为0的元素,也就是该字符串内唯一的char类型数字字符,完全匹配push_back的参数要求,因此可以正常编译运行。
注意事项
这个写法仅适用于游程长度不超过9的场景。如果后续需要支持长度大于9的连续字符编码,不能直接取[0],需要把多位数的每一位对应的字符逐个追加到容器中,否则会出现长度值解析错误。
内容的提问来源于stack exchange,提问作者Crade47
相关产品推荐
相关产品推荐

