如何在C++中连接两个字符串?

qv7cva1a  于 2022-12-27  发布在  其他
关注(0)|答案(8)|浏览(201)

我有一个私有类变量char name[10],我想给它添加.txt扩展名,这样我就可以打开目录中的文件。
我该怎么做?
最好创建一个新的字符串变量来保存连接的字符串。

6yt4nkrj

6yt4nkrj1#

首先,不要使用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

8yparm6h

8yparm6h2#

既然是C++,为什么不用std::string代替char*呢?

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

bcs8qyzn3#

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

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

现在你明白为什么大家都推荐std::string了吧?

exdqitrt

exdqitrt4#

移植的C库中有一个strcat()函数,它将为您执行“C样式字符串”连接。
顺便说一句,尽管C++有一堆函数来处理C风格的字符串,但它可能会对您有所帮助,您可以尝试并提出自己的函数来处理这些字符串,例如:

char * con(const char * first, const char * second) {
    int l1 = 0, l2 = 0;
    const char * f = first, * l = second;

    // find lengths (you can also use strlen)
    while (*f++) ++l1;
    while (*l++) ++l2;

    // allocate a buffer including terminating null char
    char *result = new char[l1 + l2 + 1];

    // 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运算符重载。
另外,不要忘记,在这种情况下,结果是动态分配的,所以您可能希望对它调用delete以避免内存泄漏,或者您可以修改函数以使用堆栈分配的字符数组,当然前提是它具有足够的长度。

sbdsn5lh

sbdsn5lh5#

C++14语言

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

对问题的回答:

auto fname = ""s + name + ".txt";
crcmnpdw

crcmnpdw6#

strcat(destination,source)在c++中可以用来连接两个字符串。
要深入了解,您可以在以下链接中查找-
http://www.cplusplus.com/reference/cstring/strcat/

gcmastyq

gcmastyq7#

最好用C++字符串类代替老式的C字符串,这样生活会轻松很多。
如果您有现有旧样式字符串,则可以转换为字符串类

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
xzlaal3s

xzlaal3s8#

//String appending
#include <iostream>
using namespace std;

void stringconcat(char *str1, char *str2){
    while (*str1 != '\0'){
        str1++;
    }

    while(*str2 != '\0'){
        *str1 = *str2;
        str1++;
        str2++;
    }
}

int main() {
    char str1[100];
    cin.getline(str1, 100);  
    char str2[100];
    cin.getline(str2, 100);

    stringconcat(str1, str2);

    cout<<str1;
    getchar();
    return 0;
}

相关问题