这是"ASCII算术"的可接受用途吗?

Joh*_*ant 4 c++

我有一个表格的字符串值,10123X123456其中10是年份,123是一年中的日期数,其余的是系统生成的独特内容.在某些情况下,我需要在日期编号中添加400,以便例如上面的数字10523X123456.

我的第一个想法是对这三个字符进行子串,将它们转换为整数,向它添加400,将它们转换回字符串,然后调用replace原始字符串.这样可行.

但后来我发现我真正需要改变的唯一一个角色是第三个角色,原始值总是0-3,所以永远不会有任何"携带"问题.我进一步想到,数字的ASCII码点是连续的,因此例如将数字4加到字符"0"将导致"4",依此类推.这就是我最终做的事情.

我的问题是,有什么理由不会一直有效吗?我通常避免使用"ASCII算术",因为它不是跨平台或国际化友好的.但似乎有理由假设数字的代码点总是顺序的,即"4"总是比"3"多1.有人看到这个推理有什么问题吗?

这是代码.

string input = "10123X123456";
input[2] += 4;
//Output should be 10523X123456
Run Code Online (Sandbox Code Playgroud)

Mic*_*fik 9

从C++标准,第2.2.3节:

在源和执行基本字符集中,上述十进制数字列表中0之后的每个字符的值应比前一个值大1.

所以,是的,如果你保证永远不需要随身携带,那么你很高兴.


Jef*_*dge 5

C++语言定义要求数字的代码点值是连续的.因此,ASCII算术是完全可以接受的.