だから私は無駄に次の問題を解決しようとしてきました:
指定した数の文字を文字列から削除する removeString という関数を作成します。この関数は、ソース文字列、ソース文字列の開始インデックス番号、および削除する文字数の 3 つの引数を取る必要があります。そのため、配列テキストに文字列「the wrong son」が含まれている場合、呼び出し
removeString (テキスト、4、6);
配列テキストから文字 "wrong" ("wrong" という単語とそれに続くスペース) を削除する効果があります。テキスト内の結果の文字列は「息子」です。
他の解決策を調べてみましたが、それらはすべてmemcpy
、私の本ではまだ紹介されていないため、回避したい機能を使用しており、いわば「システムをだます」ことはしたくありません。
私の removeString 関数は次のとおりです。
void removeString (char text[], int x, int y)
{
char output[81];
int i, z = 0;
for ( i = 0; (i <= 81); i++) {
if (z < (x-1) || z > (x+y-1) ) {
output[z] = text[z];
//printf("%i\n", z);
z++;
} else {
z++;
}
}
}
int main(void)
{
char s1[81] = "the wrong son";
int startPoint = 4, runLength = 6;
removeString(s1, startPoint, runLength);
printf("The new text is as follows:\n");
printf("%s\n", s1);
return 0;
}
「z」の値を印刷すると、数字がスキップされていることがわかりますが、何らかの理由ですべてを にコピーしているように見えtext[]
ますoutput[]
。