如何在C ++中连接两个string?

我有一个私人类variables(char name [10]),我想添加.txt扩展名,以便打开目录中的文件。 我如何去做这件事? 最好创build一个包含连接string的新stringvariables。

首先,不要使用char*char[N] 。 使用std::string ,那么一切都变得如此简单!

例子,

 std::string s = "Hello"; std::string greet = s + " World"; //concatenation easy! 

很简单,不是吗?

现在,如果你需要char const *出于某种原因,例如当你想传递给某个函数,那么你可以这样做:

 some_c_api(s.c_str(), s.size()); 

假设这个函数声明为:

 some_c_api(char const *input, size_t length); 

从这里开始探索std::string

  • std :: string的文档

希望有所帮助。

既然是C ++,为什么不使用std::string而不是char* ? 连接将是微不足道的:

 std::string str = "abc"; str += "another"; 

如果你用C语言编程,那么假设name真的像你说的那样是一个固定长度的数组,你必须做如下的事情:

 char filename[sizeof(name) + 4]; strcpy (filename, name) ; strcat (filename, ".txt") ; FILE* fp = fopen (filename,... 

你现在看到为什么每个人都推荐std::string

从移植的C库有一个strcat()函数,它会为你做“C风格的string”连接。

顺便说一句,即使C ++有一堆函数来处理C风格的string,但是你可以尝试一下自己的函数来做这件事情,比如:

 char * con(const char * first, const char * second) { int l1 = 0, l2 = 0; const char * f = first, * l = second; // step 1 - find lengths (you can also use strlen) while (*f++) ++l1; while (*l++) ++l2; char *result = new char[l1 + l2]; // then concatenate for (int i = 0; i < l1; i++) result[i] = first[i]; for (int i = l1; i < l1 + l2; i++) result[i] = second[i - l1]; // finally, "cap" result with terminating null char result[l1+l2] = '\0'; return result; } 

…接着…

 char s1[] = "file_name"; char *c = con(s1, ".txt"); 

…其结果是file_name.txt

你也可能试图编写你自己的operator +但是只有指针的IIRC操作符重载,因为参数是不允许的。

另外,不要忘记在这种情况下结果是dynamic分配的,所以你可能要调用delete来避免内存泄漏,或者你可以修改函数来使用堆栈分配的字符数组,当然它提供了足够的长度。

strcat(destination,source)可以用来连接c ++中的两个string。

要深入了解,可以在以下链接中查找 –

http://www.cplusplus.com/reference/cstring/strcat/

使用C ++string类而不是旧式的Cstring会更好,生活会更容易。

如果你有旧式的string,你可以转换成string类

  char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; cout<<greeting + "and there \n"; //will not compile because concat does \n not work on old C style string string trueString = string (greeting); cout << trueString + "and there \n"; // compiles fine cout << trueString + 'c'; // this will be fine too. if one of the operand if C++ string, this will work too 
 //String appending #include<iostream> using namespace std; void stringconcat(char *str1, char *str2){ while (*str1 != '\0'){ str1++; } while(*str2 != '\0'){ *str1 = *str2; str1++; str2++; } return ; } int main( ){ char str1[100]; cin.getline(str1,100); char str2[100]; cin.getline(str2,100); stringconcat(str1,str2); cout<<str1; getchar(); return 0; }