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 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 回答