【问题标题】:Delete first word from string on C从C中的字符串中删除第一个单词
【发布时间】:2017-11-26 16:04:36
【问题描述】:

我有一个函数可以接收两个字符数组(资源和结果)并更改它们。结果将只是第一个单词和之前所有内容的第一个单词和资源,除了第一个单词。第一个单词写入结果,但在资源中删除了一些空格...

void selectFirstWord(char *src, char* res) {
int i = 1;

while(*src != ' ' && *src != 0) {
   *(res++) = *(src++); //посимвольное копирование из src в res
   i++;
}

while(*src != 0) {
    *(src++) = *(src+i);
}

*res = 0;
}

【问题讨论】:

  • 请用英文写...
  • 或在ru.stackoverflow.com发帖
  • @RingØ 我做到了。
  • *(src++) = *(src+i);这里没有序列点...

标签: c string words


【解决方案1】:

您可以保留一份原版src

void selectFirstWord(char *src, char* res) {

    char *copy = src;                  // keep copy

    while(*src != ' ' && *src != 0) {
        *res++ = *src++;
    }
    *res = 0; // "close" res

    while(*src == ' ') src++; // eat spaces after the word

    // Copy the rest of src to `copy`
    do {
        *copy++ = *src;   
    } while(*src++ != 0);
}

与您的代码不同

  • copy 保留 src 的副本
  • res 得到src 的第一个单词后,在src 中吃下面的空格
  • 然后将src的剩余部分复制到copy(指向原来的src

还有一个使用索引的解决方案。 src[i],但这里我们只是跟随 src 从头到尾递增。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 2022-01-16
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多