123

ディレクトリに存在するファイルを開くことができるようchar name[10]に、拡張子を追加したいプライベートクラス変数があります。.txt

どうすればいいですか?

連結された文字列を保持する新しい文字列変数を作成することをお勧めします。

4

8 に答える 8

191

まず、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してください:

それが役立つことを願っています。

于 2013-03-10T07:15:04.330 に答える
36

それはC++なので、std::string代わりに使用しないのはなぜchar*ですか? 連結は簡単です:

std::string str = "abc";
str += "another";
于 2013-03-10T07:15:00.733 に答える
19

Cでプログラミングしている場合、name実際にあなたが言うように固定長の配列であると仮定すると、次のようなことをする必要があります。

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

なぜみんながお勧めするのか分かりますstd::stringか?

于 2013-03-10T07:29:37.057 に答える
8

移植された C ライブラリには、「C スタイルの文字列」連結を行うstrcat()関数があります。

ところで、C++ には C スタイルの文字列を処理するための関数がたくさんありますが、次のような独自の関数を試してみると有益な場合があります。

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 演算子はポインターのみでオーバーロードされます。

また、この場合の結果は動的に割り当てられることを忘れないでください。そのため、メモリ リークを回避するために delete を呼び出すか、スタックに割り当てられた文字配列を使用するように関数を変更できますが、もちろん十分な長さがあります。

于 2013-03-10T07:18:43.340 に答える
0

strcat(destination,source) can be used to concatenate two strings in c++.

To have a deep understanding you can lookup in the following link-

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

于 2017-02-10T17:02:31.613 に答える
-2
//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;
}
于 2015-06-23T19:22:15.500 に答える