ディレクトリにあるファイルを開くことができるように.txt拡張子を追加するプライベートクラス変数(char name [10])があります。これについてどうすればいいですか?連結された文字列を保持する新しい文字列変数を作成することが望ましいでしょう。C++で2つの文字列を連結する方法は?
答えて
まず、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
自分も見てみよう
希望に応じます。
char*
の代わりにstd::string
を使用しないのはなぜですか? 連結は些細なことになります。すべての
std::string str = "abc";
str += "another";
"Cスタイルの文字列"連結を行う移植されたCライブラリのstrcat()関数があります。あなたがしようとし、独自の機能を考え出すないため
はBTW 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
です。
自分で書くこともできますが、引数としてポインタだけを使用してIIRC演算子のオーバーロードを行うことはできません。operator +
また、この場合の結果が動的に割り当てられていることを忘れないでください。メモリリークを避けるためにdeleteを呼び出すこともできますし、スタック割り当て文字配列を使用するように関数を変更することもできます十分な長さを有する。誰もがstd::string
を推奨していますなぜあなたは今見
char filename[sizeof(name) + 4];
strcpy (filename, name) ;
strcat (filename, ".txt") ;
FILE* fp = fopen (filename,...
:
//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;
}
.........私は何を見ていますか? –
strcat(destination、source)は、C++で2つの文字列を連結するために使用できます。
あなたはそれではなく、古いスタイルの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
をひそかことができ、この文字列連結の時間複雑さとは何ですか? – d34th4ck3r
@ d34th4ck3r:線形です。 – Nawaz