我有一个字符串(例如"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'
时,我遇到了在中间切割字符串的问题。
答案 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);
}