ディレクトリに存在するファイルを開くことができるようchar name[10]
に、拡張子を追加したいプライベートクラス変数があります。.txt
どうすればいいですか?
連結された文字列を保持する新しい文字列変数を作成することをお勧めします。
ディレクトリに存在するファイルを開くことができるようchar name[10]
に、拡張子を追加したいプライベートクラス変数があります。.txt
どうすればいいですか?
連結された文字列を保持する新しい文字列変数を作成することをお勧めします。
まず、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
してください:
それが役立つことを願っています。
それは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 ライブラリには、「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 を呼び出すか、スタックに割り当てられた文字配列を使用するように関数を変更できますが、もちろん十分な長さがあります。
strcat(destination,source) can be used to concatenate two strings in c++.
To have a deep understanding you can lookup in the following link-
//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;
}