繁体   English   中英

如何从C字符串中提取数字?

[英]How do I extract digits from a C string?

我正在尝试制作三个简单的c程序,但是我将其限制为仅其中一个,因为第一个问题仅特定于一个。 (是的,这是为了防止您好奇。)

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

"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;
}

尝试这个:

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

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

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

简单地做

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM