4

文字列 (または char *) の一部のみを別の文字列 (または別の char *) にコピーしようとしています。

char * first_string = "Every morning I"
char * second_string = "go to the library, eat breakfast, swim."
char * final_string;

second_string の一部を first_string にコピーしたいと思います。

例えば:

毎朝私は朝食を食べます。

文字列の特定の位置から始めて、文字列の一部だけをコピーできる機能は何ですか?

注:文字列変数は使用したくありませんが、可能な場合は char * または char 配列を使用します。

4

5 に答える 5

7

ですstd::copyが、変更が違法な文字列リテラルへのポインターがあるため、コードでは未定義の動作が発生します。

次のようなものが必要になります

char first_string[256] = "Every morning I";
char second_string[256] = "go to the library, eat breakfast, swim.";

std::copy(
    &second_string[23],
    &second_string[36],
    &first_string[strlen(first_string)]
);

インデックスがずれている可能性があります。

于 2012-11-26T18:38:24.080 に答える
4

本当にやりたい場合は、strcat を使用します (文字列を使用しない場合は、とにかく C 関数で問題ないはずです)。

const char * first_string = "Every morning I";
const char * second_string = "go to the library, eat breakfast, swim.";
char final_string[80]; // make sure it's big enough - I haven't counted ;-)

strcpy(final_string, first_string);     // copy to destination
strcat(final_string, second_string+18); // append part of the second string
于 2012-11-26T18:48:48.897 に答える
1

私はこのように'strncat()'を使用します:

const char * first_string = "Every morning I";
const char * second_string = "go to the library, eat breakfast, swim.";

char final_string [200];

//Copies first string first
strcpy(final_string, first_string);

//Copies second string
strncat(final_string, second_string[ text_position ], text_length);

テキストのコピーを開始するtext_position位置に置き換え、コピーするテキストの部分の長さに置き換えます。second_stringtext_length

このようにして、テキストの別々の部分をコピーできますが、必ずしも文字列のポイントから最後までコピーする必要はありません。

于 2012-11-26T19:03:27.027 に答える
0

を使用strstr()して、必要な部分の先頭を検索してstrcat()から、連結することができます。

char * first_string = "Every morning I";
char * second_string = "go to the library, eat breakfast, swim.";
char * final_string;

char* s = "eat";
char* r = strstr(second_string, s);

strcat(final_string, first_string);
strcat(final_string, " ");
strcat(final_string, r);
于 2012-11-26T18:53:49.500 に答える