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

时间:2013-09-27 00:51:38

标签: c string output digit

我正在尝试制作三个简单的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;
}

2 个答案:

答案 0 :(得分:0)

试试这个:

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

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

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

答案 1 :(得分:0)

简单地做

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

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