0

文字列があります(例"one two three four")。記号4thから始まる単語を切り取る必要があることを私は知っています。6thどうすればこれを達成できますか?

結果は次のようになります。

Cut string is "two"
Result string is "one three four"

今のところ、削除された単語を取得できることを達成しました-'

for(i = 0; i < stringLength; ++i) { 
          if((i>=wordStart) && (i<=wordEnd))
          {
              deletedWord[j] = sentence[i];
              deletedWord[j+1] = '\0';
              j++;                
          }
    }

しかし、私が埋めるとき、sentence[i] = '\0'私は真ん中でひもを切るのに問題があります。

4

3 に答える 3

2

'\0'文字列の途中(実際には文字列を終了する)に置く代わりに、単語以外のすべてを一時的な文字列にコピーしてから、一時的な文字列を元の文字列にコピーして上書きします。

char temp[64] = { '\0' };  /* Adjust the length as needed */

memcpy(temp, sentence, wordStart);
memcpy(temp + wordStart, sentence + wordEnd, stringLength - wordEnd);
strcpy(sentence, temp);

編集:(提案されているようにmemmove)実際に必要な呼び出しは1つだけです:

/* +1 at end to copy the terminating '\0' */
memmove(sentence + wordStart, sentence + wordEnd, stringLengt - wordEnd + 1);
于 2012-10-14T16:06:49.163 に答える
2

文字を '\0' に設定すると、文字列が終了します。

やりたいことは、必要なデータを使用してまったく新しい文字列を作成するか、文字列がどこから来て、後でどのように使用されるかが正確にわかっている場合は、カットされた単語を残りの文字列で上書きすることです。

于 2012-10-14T16:11:08.700 に答える
0
/*sample initialization*/
char sentence[100] = "one two three four";

char deleted_word[100];
char cut_offset = 4;
int cut_len = 3;

/* actual code */
if ( cut_offset < strlen(sentence) && cut_offset + cut_len <= strlen(sentence) )
{
    strncpy( deleted_word, sentence+cut_offset, cut_len);
    deleted_word[cut_len]=0;

    strcpy( sentence + cut_offset, sentence + cut_offset + cut_len);
}
于 2012-10-14T16:28:25.563 に答える