从C中的String中剪切子字符串

时间:2012-10-14 16:02:46

标签: c string

我有一个字符串(例如"one two three four")。我知道我需要剪切从4th6th符号的单词。 我怎样才能做到这一点?

结果应该是:

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'时,我遇到了在中间切割字符串的问题。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

当您将字符设置为'\ 0'时,您将终止该字符串。

您要做的是创建一个包含所需数据的全新字符串,或者,如果您确切知道字符串的来源以及以后如何使用它,请用字符串的其余部分覆盖剪切字。

答案 2 :(得分: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);
}