仅打印字符串中的字母

时间:2014-04-11 22:53:02

标签: c string io character ascii

我必须创建一个接受字符串的程序,只打印字母(大写和小写)。我真的需要一些帮助来完成这个程序。

例如:

输入:Cat808her_ + in_ + e87

输出:凯瑟琳

输入:2012年11月06日_ENEE140 $$$ exa!m

输出:NovENEEexam

#include <stdio.h>

char string[256];
int character;
int c=0;

int main(){
    printf("Enter a string: ");
    while((character=getchar()) != '\n'){
        if((character>='A'&&character<='Z')||(character>='a'&&character<='z')){
            c++;
            string[c]=character;
        }
        printf("Only letters: %s\n", string);
    }
    return 0;
}

5 个答案:

答案 0 :(得分:1)

在您的循环中,您首先递增c,然后分配string[c]内获得的字母,前提是if中的条件已满足。

这意味着它将从string[1]开始分配,让第一个保留原来的状态。作为文件范围数组,char string[256]将其字符初始化为零。因此,您的第一个元素将保持为零。

零遇到意味着"%s"printf类型说明符的字符串结尾以及许多其他内容。因此,不会打印任何内容,因为从'\0'开始的字符串在技术上没有任何内容。

在分配后放置c++,您的代码应该没问题。您可以选择使用以下内容:

...
    string[c++] = character;
...

您不必包含终止零,因为您的字符串已经用零初始化。

您可以添加一些检查,让c超过255,甚至254,这样您就不会意外地将某些内容分配给最后一个零,或者尝试访问除此之外的任何内容,这是不允许访问。

答案 1 :(得分:0)

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

int main()
    {
    char string[255+1];
    char *cp;

    printf("Enter a string: ");
    fgets(string, sizeof(string), stdin);
    printf("Only letters: ");
    for(cp=string; *cp; ++cp)
        if(isalpha(*cp))
           printf("%c", *cp);

    printf("\n");
    return(0);
    }

答案 2 :(得分:0)

除了&#34;字符串[c ++] =字符;&#34;修正,为行:

if((character>='A'&&character<='Z')||(character>='a'&&character<='z')){

您可以或应该使用isalpha()函数(在#include&lt; ctype.h&gt;之后),如下所示:

if(isalpha(character){

默认&#34; C&#34; locale这正是你想要的。您可能还想使用fgets()而不是getchar(),它可以防止输入缓冲区溢出。并使用以下命令将字符串初始化为所有空值

char string[256]={0};

答案 3 :(得分:0)

比较像c > 'A'这样的字符值在整理顺序与C语言环境不同的某些语言环境中无法正常工作;使用isalnum(c)是可行的方法。

答案 4 :(得分:0)

这对我有用:

#include <stdio.h>

char string[256];
int character;
int c=0;

int main(){
 printf("Enter a string: ");
 while((character=getchar()) != '\n'){
     if((character>='A'&&character<='Z')||(character>='a'&&character<='z')){

         string[c++]=character;
     }

 }
 printf("Only letters: %s\n", string);
 return 0;
}