2

我是 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);
    }
}
4

3 回答 3

2

像 这样使用isalpha,isspacetoupper<ctype.h>

while ((c=getchar())!=EOF) {
    if(isalpha(c) || isspace(c))// isspace allow '\t' => c == ' ' || c == '\n'
        putchar(toupper(c));
}
于 2015-09-26T23:17:03.130 回答
0

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

于 2015-09-26T23:03:33.390 回答
0

你可以使用类似的东西:

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'

于 2015-09-26T23:09:50.820 回答