使用 (str += s) 和 (str = str + s) 连接字符串的区别
在本教程中,我们将学习使用“+=”或“+”运算符连接字符串的区别。这两个运算符都用于合并字符串,但我们将在下面通过示例学习一些区别。
什么是加法赋值 (+=) 运算符?
加法赋值 (+=) 运算符连接两个字符串。它有两个操作数。左操作数是原始字符串,右操作数是要与原始字符串连接的字符串。通常,当我们只需要连接两个字符串时,我们使用“+=”运算符。
语法
用户可以按照以下语法使用加法赋值 (+=) 运算符连接字符串。
Str += str1;
在上面的语法中,Str 是原始字符串,str1 是要与 Str 连接的字符串。
示例
在下面的示例中,我们定义了两个名为 str1 和 str2 的字符串。之后,我们使用加法赋值运算符将字符串 str1 与 str2 合并。程序员可以观察下面代码的输出,它连接了给定的字符串。
#include <bits/stdc++.h> using namespace std; int main() { // First string string str1 = "TutorialsPoint"; // second string string str2 = " is a best website!"; // Using += operator to concatenate str1 += str2; cout << "The updated str1 is " << str1; return 0; }
输出
The updated str1 is TutorialsPoint is a best website!
什么是加法 (+) 运算符?
在 C++ 中,加法 (+) 运算符也用于连接两个字符串,就像添加两个数字值一样。它将字符串附加到原始字符串,我们可以将结果字符串赋值给第三个字符串。当我们需要在一个语句中连接两个以上的字符串时,可以使用“+”运算符进行字符串连接。
语法
用户可以按照以下语法使用加法运算符连接字符串。
string s = str1 + str2;
在上面的语法中,我们将 str1 和 str2 字符串连接起来,并将结果字符串赋值给“s”字符串。
示例
在下面的示例中,str1 和 str2 字符串变量包含不同的字符串值。之后,我们将 str1 和 str2 合并,并将结果字符串赋值给 str1。在输出中,我们可以看到 str1 字符串的值。
#include <bits/stdc++.h> using namespace std; int main() { // First string string str1 = "TutorialsPoint"; // second string string str2 = " is a best website!"; // Using += operator to concatenate str1 = str1 + str2; cout << "The updated str1 is " << str1; return 0; }
输出
The updated str1 is TutorialsPoint is a best website!
“+=”和“+”运算符的区别
现在,让我们讨论在使用“+=”和“+”运算符连接字符串时的区别。
“+=”运算符 |
“+”运算符 |
|
---|---|---|
字符串数量 |
它在一个语句中只能连接两个字符串。 |
它在一个语句中可以连接两个或多个字符串。 |
字符串赋值 |
它将字符串附加到原始字符串。 |
它将字符串连接到原始字符串并重新赋值字符串。 |
性能 |
“+=”的性能优于“+”运算符,因为它将字符串附加到原始字符串。 |
由于字符串连接后重新赋值字符串,因此其性能较差。 |
示例
下面的示例演示了“+=”和“+”运算符之间的区别。在这里,我们创建了四个不同的字符串。此外,我们还定义了“result”字符串,并使用“+”运算符在一个语句中连接所有四个字符串并将它们赋值给“result”字符串。
之后,我们使用“+=”运算符将所有字符串附加到第一个字符串。我们编写了 3 个语句将 3 个字符串附加到“first”字符串。
在输出中,我们可以看到两种方法都给出了相同的输出,但是使用“+=”运算符时需要编写更多语句。
#include <bits/stdc++.h> using namespace std; int main(){ // Defining multiple strings string first = "C++"; string second = "Programming"; string third = "Language"; string fourth = "is awesome"; // Concatenating strings using + operator string result = first + " " + second + " " + third + " " + fourth; // print result cout << "Using the + operator - " << result << endl; // Use += operator to concat strings first += second; first += third; first += fourth; // print result cout << "Using the += operator - " << first << endl; return 0; }
输出
Using the + operator - C++ Programming Language is awesome Using the += operator - C++ProgrammingLanguageis awesome
示例
在这种方法中,我们测量“+=”和“+”运算符的性能。addAssignOperator() 函数将 1 到 100000 的正整数转换为字符串,并使用“+=”运算符附加到“alpha”字符串。类似地,addOperator() 函数使用“+”运算符将 1 到 100000 的数字附加到“alpha”字符串。
在 main() 方法中,我们使用来自“time.h”库的“struct timeval”来计算函数的执行时间。我们使用 gettimeofday() 方法获取当前时间。我们在函数调用之前和之后执行它。接下来,我们可以取时间差以获得函数执行时间。通过这种方式,我们找到这两个函数的执行时间。
在输出中,我们可以观察到“+=”比“+”运算符快得多。
#include <bits/stdc++.h> #include <sys/time.h> using namespace std; // function to concat string using += operator void addAssignOperator() { // empty string string alpha = ""; // Append numbers for (int p = 0; p < 100000; p++) { alpha += to_string(p); } } // function to concat string using + operator void addOperator() { // empty string string alpha = ""; // Append numbers for (int p = 0; p < 100000; p++) { alpha = alpha + to_string(p); } } int main() { // variables to store startTime and endTime time struct timeval startTime, endTime; // Initialize start time gettimeofday(&startTime, NULL); ios_base::sync_with_stdio(false); addAssignOperator(); // store end time gettimeofday(&endTime, NULL); // to store total time taken by function addAssignOperator() double totalTime = ((endTime.tv_sec - startTime.tv_sec) * 1e6 + (endTime.tv_usec - startTime.tv_usec)) * 1e-6; cout << "Total time to use += operator is : " << totalTime << setprecision(10) << " secs" << endl; // Initialize start time gettimeofday(&startTime, NULL); ios_base::sync_with_stdio(false); addOperator(); // store end time gettimeofday(&endTime, NULL); // to store total time taken by function addOperator() totalTime = ((endTime.tv_sec - startTime.tv_sec) * 1e6 + (endTime.tv_usec - startTime.tv_usec)) * 1e-6; cout << "Total time to use + operator is : " << totalTime << setprecision(7) << " secs" << endl; return 0; }
输出
Total time to use += operator is : 0.005787 secs Total time to use + operator is : 0.624564 secs
请注意,上述时间可能会因每次编译而异。
当我们需要连接包含数千个条目的字符串数组时,我们应该使用“+=”运算符以获得更好的性能;当我们需要使用 2 到 5 个字符串时,我们应该使用“+”运算符以使代码更易读。