【问题标题】:Remove characters from a string in C [duplicate]从C中的字符串中删除字符[重复]
【发布时间】:2011-08-08 06:15:07
【问题描述】:

可能重复:
Remove characters from a string in C

我正在用 C 语言创建一个小型 todo 应用程序,我想从字符串中删除 * 然后删除 space 我遍历每一行然后检查 lineNumber 是否是传入的到函数然后我想知道如何从该行中删除字符,这是我循环遍历行的代码

    while (fgets(line, sizeof line, oldTodoFile)) {
        len = strlen(line);
        if (len && (line[len - 1] != '\n')) {} else {
            lineNumber++;
            if (lineNumber == todoNumber) {
              // remove *[space]
            } else {
                fprintf(todoFile);
            }
        }

【问题讨论】:

  • 为什么用 C 来做文本处理应用?
  • 您的短语中的问题到底在哪里?
  • 我已经更新了问题以明确(我认为)并且我正在使用 C,因为我正在尝试学习 C
  • 请在提出新问题之前使用搜索。 (具有讽刺意味的是,现有问题的标题完全相同
  • 您可以逐个字符地读取文件,丢弃不需要的字符。这可能是在 C 语言中最简单的方法。

标签: c string


【解决方案1】:

听起来您在问如何从字符串的开头 中删除前导'* '。你有两个选择:

  • 您可以将每个字符向后移动两个空格,例如:

    if(startsWithStarSpace) {
      int i;
      for(i = 2; i < len; ++i)
        str[i-2] = str[i];
      str[i] = '\0';
    }
    
  • 或者,如果您的字符串是动态分配的,您只需将指针向前移动两个字符(确保稍后将旧指针保存到free())。

【讨论】:

    【解决方案2】:

    一种简单的方法(注意我知道这不是最好的方法,我确信有很多标准功能)是:

    if(lineNumber == todoNumber) {
     char buff[len];
     char* bptr = buff;
     char* lptr = line;
     for(;lptr!=NULL;) {
      if(*lptr!='*')
       *bptr++ = *lptr++
      else{
       lptr++;lptr++; /*skip over * and space */
      }
     }
     strcpy(line,buff); /* replace line with updated version */
    }
    

    就像我说的,不是最好的解决方案,而是一种方法。

    【讨论】:

      猜你喜欢
      • 2021-07-02
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      • 2020-03-30
      • 1970-01-01
      相关资源
      最近更新 更多