【问题标题】:How to remove commas from a string in C如何从C中的字符串中删除逗号
【发布时间】:2023-04-11 07:17:01
【问题描述】:

假设我有一串“10, 5, 3” 我怎样才能去掉逗号,所以字符串只是“10 5 3”?我应该使用 strtok 吗?

【问题讨论】:

  • 呃,如果这是您知道如何使用的功能:是的。还有许多其他解决方案;最好坚持你所知道的。
  • 呃,如果不是,你只是想用其他东西替换字符串中的逗号,然后只需将指针向下移动到字符串和while (*p) if (*p == ',') *p++ = ' '; 以替换为“空格”。如果您要完全删除该字符,那么您基本上可以做同样的事情,但将要保留的字符复制到新字符串中。

标签: c string punctuation


【解决方案1】:
char *r, *w;
for (w = r = str; *r; r++) {
    if (*r != ',') {
        *w++ = *r;
    }
}
*w = '\0';

【讨论】:

  • 真正的 K & R 风格,不可读,难以理解,简短,高效:-)
  • 一个完全可读的解决方案,避免一头扎进序列点问题的诱惑。
  • 很有启发性。我不知道有人可以以如此优雅的方式使用指针。
【解决方案2】:

创建一个与当前字符串大小相同(终止字符+1)的新字符串,一个一个地复制每个字符并将','替换为''。

for 循环中,你会得到这样的东西:

if (old_string[i] == ',')
    new_string[i] = ' ';
else
    new_string[i] = old_string[i];
i++;

然后在for 循环之后,不要忘记在new_string 的末尾添加'\0'。

【讨论】:

    【解决方案3】:

    @melpomene 的小幅简化。
    先做潜在的赋值,然后检查空字符。

    const char *r = str;
    char *w = str;
    do {
      if (*r != ',') {
        *w++ = *r;
      }
    } while (*r++);
    

    【讨论】:

      【解决方案4】:

      这样的事情怎么样? (我的 C 有点生疏,我手边没有编译器,所以请原谅任何语法错误)

      char *string_with_commas = getStringWithCommas();
      
      char *ptr1, *ptr2;
      ptr1 = ptr2 = string_with_commas;
      
      while(*ptr2 != '\0')
      {
          if(*ptr2 != ',') *ptr1++ = *ptr2++;
          else *ptr2++;
      }
      
      *ptr1 = '\0';
      

      您也可以使用不同的变量来存储结果,但由于保证结果字符串的长度等于或小于源字符串的长度,所以在我们进行时覆盖它应该是安全的。

      【讨论】:

      • 这看起来像我的解决方案,只是代码有点奇怪。 (特别是,else *ptr++; 可能会触发编译器警告。)
      • @melpomene:不,缺少的分号就是这样做的。但是代码本身就有缺陷;它修改逗号-我认为它会将它们更改为+
      • @Jongware 是的,这是在添加缺少的; 之后。 :-) 你从哪里得到+
      • @Jongware 不,它没有。
      • @Jongware 是的,* 无效。这就是为什么我会对此发出警告。
      【解决方案5】:

      这是程序:

      #include  <stdio.h>
      #include  <conio.h>
          int main()
          {
            int  i ;
            char  n[20] ;
      
            printf("Enter a number. ") ;
          gets(n) ;
            printf("Number without comma is:") ;
            for(i=0 ; n[i]!='\0' ; i++)
              if(n[i] != ',')
                putchar(n[i]) ;
      
          }
      

      详细描述可以参考这个博客:http://tutorialsschool.com/c-programming/c-programs/remove-comma-from-string.php

      【讨论】:

      • gets 永远不应该被使用;它本质上是不安全的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 2011-05-27
      • 1970-01-01
      相关资源
      最近更新 更多