C++string加减运算是怎么样的
时间: 2024-03-18 15:16:59 浏览: 23
在C++中,字符串可以用标准库中的`string`类来表示。`string`类支持加法运算符`+`和赋值运算符`=`。
对于两个字符串`s1`和`s2`,使用加法运算符可以将它们拼接在一起,生成一个新的字符串。例如:
```
string s1 = "Hello";
string s2 = "World";
string s3 = s1 + s2; // s3 = "HelloWorld"
```
对于字符串`s`和整数`n`,使用加法运算符可以将整数转换为字符串并将其拼接到`s`的末尾。例如:
```
string s = "The answer is: ";
int n = 42;
string result = s + to_string(n); // result = "The answer is: 42"
```
对于字符串`s1`和`s2`,使用赋值运算符可以将`s2`的内容复制到`s1`中。例如:
```
string s1 = "Hello";
string s2 = "World";
s1 = s2; // s1 = "World"
```
需要注意的是,字符串的加法和赋值运算符都会创建一个新的字符串对象,因此如果需要频繁地对大量字符串进行修改,可能会导致性能问题。在这种情况下,可以考虑使用其他数据结构,例如`char`数组或`vector<char>`。
相关问题
c++超长整数的加减运算
C++中可以使用string来存储超长整数,并且可以通过自定义函数实现加减运算。下面是一个简单的示例代码:
```c++
#include <iostream>
#include <string>
using namespace std;
string add(string num1, string num2) {
string result = ""; // 保存结果
int carry = 0; // 进位标志
int i = num1.size() - 1; // num1的最高位
int j = num2.size() - 1; // num2的最高位
while (i >= 0 || j >= 0 || carry > 0) {
int n1 = i >= 0 ? num1[i--] - '0' : 0;
int n2 = j >= 0 ? num2[j--] - '0' : 0;
int sum = n1 + n2 + carry;
carry = sum / 10;
result = to_string(sum % 10) + result;
}
return result;
}
string subtract(string num1, string num2) {
string result = ""; // 保存结果
int borrow = 0; // 借位标志
int i = num1.size() - 1; // num1的最高位
int j = num2.size() - 1; // num2的最高位
while (i >= 0 || j >= 0) {
int n1 = i >= 0 ? num1[i--] - '0' : 0;
int n2 = j >= 0 ? num2[j--] - '0' : 0;
int diff = n1 - n2 - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
result = to_string(diff) + result;
}
// 去掉前导0
while (result.size() > 1 && result[0] == '0') {
result.erase(0, 1);
}
return result;
}
int main() {
string num1 = "123456789012345678901234567890";
string num2 = "987654321098765432109876543210";
cout << add(num1, num2) << endl;
cout << subtract(num1, num2) << endl;
return 0;
}
```
上述代码实现了超长整数的加减运算,其中使用了string类型存储超长整数,利用循环逐位相加/相减并处理进/借位。需要注意的是,减法需要判断被减数是否小于减数,若小于则需要向高位借位。对于减法的结果,需要去掉前导0。
超长整数的加减运算c++
当超长整数无法用内置的数据类型表示时,可以使用字符串来存储超长整数,并编写对应的加减运算函数。以下是C++的代码示例:
```cpp
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string add(string a, string b) {
string res;
int carry = 0;
int i = a.size() - 1, j = b.size() - 1;
while (i >= 0 || j >= 0 || carry) {
int sum = carry;
if (i >= 0) sum += a[i--] - '0';
if (j >= 0) sum += b[j--] - '0';
carry = sum / 10;
res += to_string(sum % 10);
}
reverse(res.begin(), res.end());
return res;
}
string subtract(string a, string b) {
string res;
int borrow = 0;
int i = a.size() - 1, j = b.size() - 1;
while (i >= 0 || j >= 0) {
int diff = borrow;
if (i >= 0) diff += a[i--] - '0';
if (j >= 0) diff -= b[j--] - '0';
borrow = diff < 0 ? -1 : 0;
res += to_string((diff + 10) % 10);
}
while (res.size() > 1 && res.back() == '0') res.pop_back();
reverse(res.begin(), res.end());
return res;
}
int main() {
string a, b;
cin >> a >> b;
cout << add(a, b) << endl;
cout << subtract(a, b) << endl;
return 0;
}
```
其中,`add`函数实现了超长整数的加法运算,`subtract`函数实现了超长整数的减法运算。这两个函数的思路类似,都是从低位往高位逐位相加/相减,并处理进位/借位。最后需要注意的是,减法运算可能会出现前导零,需要特殊处理。