【问题标题】:How do I extract digits from a C string?如何从 C 字符串中提取数字?
【发布时间】:2013-09-27 00:51:37
【问题描述】:

我正在尝试制作三个简单的 c 程序,但我将其限制为仅其中一个,因为第一个问题仅针对一个。 (是的,如果你好奇的话,这是hw。)

对于这个程序,目标是创建一个可以接受字符串的程序:

"BCC  6 T LL 8 9 *** & EXTRA@@@@@"

和输出/打印

"689"

我将在下面粘贴的代码是我对此的悲伤尝试,实际上我没有得到任何结果。任何帮助表示赞赏。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main()
{
printf("BCC  6 T LL 8 9 *** & EXTRA@@@@@\n");

char ch=getchar();  
while(ch!='\n')
    {
    if(isdigit(ch)|| ch!='*' || ch!='@')
        printf("%c", ch);
    }
return 0;
}

【问题讨论】:

  • 您是否希望getchar() 阅读您打印的行?还是用户应该复制和粘贴输出?
  • 我打算让 getchar() 在行中读取,但它也可能是。
  • 您无需为刚接触编码而道歉:这里的每个人都曾在某个时候出现过。
  • 是的,你说得有道理。

标签: c string output digit


【解决方案1】:

试试这个:

while ((ch = getchar()) != '\n') {
    if (isdigit(ch) {
        printf("%c", ch);
    }
}

您的代码有一个严重的问题:您没有在while 循环内调用getchar()。所以它只会读取一个字符并重复处理同一个字符。另一个问题是您的if 条件——ch != '*' || ch != '@' 的测试对于所有字母和空格字符都是正确的。如果您只想打印数字,则无需进行这些测试。

正如我在评论中提到的,这将处理用户键入的内容,而不是您使用printf() 打印的内容。

【讨论】:

  • 啊我现在明白了。非常感谢,非常感谢!
【解决方案2】:

简单地做

while(ch!='\n')
    if(ch >= '0' && ch <= '9')
        printf("%c",ch);

简洁明了的代码。 无需调用单独的函数isdigit(),当您使用ch &gt;= '0' 时,它会比较字符的ASCII 值和'0' 一旦条件成立,您的数字将被打印。还有 no need to check for '*' and '@' ,新字符串中可以有更多这样的特殊字符。支票可以放多久?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多