在c++中,减号和加号对字符串的作用是什么

What does minus and plus notations do on string in c++

本文关键字:字符串 是什么 作用 c++      更新时间:2023-10-16

我正在询问字符串上的加号和减号的工作,特别是在这种情况下:

Solver(string s) {
for (unsigned int i = 0; i < s.length(); i++) {
grid[i] = (int) (s[i] - '0'); // the minus here will remove 0's of string or not ?
}
}
int main() {
Solver ss(
(string) "850002400" + // the plus here will combine all strings together like Java or not ?
(string) "720000009" +
(string) "004000000" +
(string) "000107002" +
(string) "305000900" +
(string) "040000000" +
(string) "000080070" +
(string) "017000000" +
(string) "000036040"
);
}
字符串的

operator+将它们连接起来——正如您已经发现的那样。但是字符串没有operator-

仔细看,不是从字符串(s - '0'(中减去,而是从字符s[i]中减去。这不会从字符串中删除该字符,而是根据该字符的值减去零字符的值来计算一个新值(该值为48,在ASCII中是兼容的,至少不是null值!(。由于C++标准保证数字是连续的(就像在C中一样(,因此可以通过这种方式可靠地从字符中计算十进制数字。

这也适用于小于10的基数,但不适用于较大的基数,因为用于表示的下一个字符不会直接跟在十进制数字后面(您可能需要区分大写字母和小写字母(。

附带说明:您不需要强制转换为int:由于类型char的大小小于int,两个操作数都将隐式提升为int,因此实际上计算是在int中完成的,结果仍然是int。。。

string-C++引用http://www.cplusplus.com/reference/string/string/

正如上面链接中所说,运算符+的意思是"连接字符串"。如果您想CLIP字符串,可以使用s.substr((函数。

grid[i] = (int) (s[i] - '0')

代码中的减号表示将"char"转换为"int"。例如,

string s="425";
char c = s[0];     //c='4';
int value = c-'0'; //value=4 it is a number

它不是字符串的函数,只是ASCII的一种利用。函数stoi(s[i](可以实现同样的事情。

从数字的任何字符中减去"0"将返回该数字的整数值。

char seven = '7';
int value = (int)(seven - '0');
cout<<value<<endl;

输出:

7

在您的示例中,-用于将字符网格(1D(转换为整数网格(1D(。

另一方面,两个或多个string类型数据之间的+符号表示串的级联。

string s =  "abc" +  "def";
cout<<s<<endl;

输出:

abcdef