【问题标题】:How do you ignore numeric input using getchar and putchar如何使用 getchar 和 putchar 忽略数字输入
【发布时间】:2015-09-26 22:52:34
【问题描述】:

我是 C 编程新手。我的一个作业问题让我很难过。这里是:

编写一个 ANSI-C 程序,使用 getchar() 从标准输入读取字符,并使用 putchar() 仅将输入中的字母、空格 (' ') 和换行符输​​出到标准输出。如果字母是小写字母,您的程序应将它们转换为大写字母。例如,给定以下输入:

There are 6 apples and 8 oranges, also 9 bananas ...... @ Apple Store!! See you there!?
您的程序的输出应该是:
THERE ARE APPLES AND ORANGES ALSO BANANAS APPLE STORE SEE YOU THERE

我可以正确使用大写部分,但我很难忽略数字和任何其他字符。任何帮助将不胜感激。

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

int main()
{
    int c;

    while ((c=getchar())!=EOF) {
        if ((c>='a' && c<='z'))
            c -= 32;
        else
            while((c==getchar())<'a' || (c==getchar())>'z' ||(c==getchar())!='\n' ||(c==getchar())!=' ');  //This is where I am having trouble.
        putchar(c);
    }
}

【问题讨论】:

  • 请向我们展示您目前的代码。
  • 向我们展示您的代码,以便我们为您提供帮助。

标签: c getchar putchar


【解决方案1】:

&lt;ctype.h&gt; 中使用isalphaisspacetoupper 像这样

while ((c=getchar())!=EOF) {
    if(isalpha(c) || isspace(c))// isspace allow '\t' => c == ' ' || c == '\n'
        putchar(toupper(c));
}

【讨论】:

  • 这正是您想要的,以最简单的方式。它会忽略所有不是字母的东西。它还推开您在 while 中放置的多个分支检查。只需确保包含该 ctype 库即可。当时,如果您想完全了解下面的操作,那么在此答案下方编写的功能会很好,但是如果这是提交点,这就是您想要的。也不太确定是否要确保输出不包含多个空格,这需要一些技巧。
【解决方案2】:

只需使用isdigit 函数来检查字符是否为数字。如果它不是数字,请像现在一样处理它。否则,忽略它并尝试读取另一个字符。

【讨论】:

    【解决方案3】:

    你可以使用类似的东西:

    char char_filter(char c)
    {
        /* lower case letters */
        if (c >= 'a' && c <= 'z')
            return c - ('a' - 'A');
    
        /* upper case letters*/
        if (c >= 'A' && c <= 'Z')
            return c;
    
        /* space and new line */
        if (c == ' ' || c == '\n')
            return c;
    
        /* other characters */
        return 0;
    }
    

    如果函数返回零,则应跳过该字符,否则应由putchar 打印:

    char c;
    while ((c = getchar()) != EOF) {
        if ((c = char_filter(c)))
            putchar(c);
    }
    

    请注意,还有标准函数int islower(int c)int isupper(int c)int isspace(int c)。函数isspace() 也将'\t''\n' 和其他一些字符视为空格。

    【讨论】:

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