检查字符串中的数字字母

时间:2017-05-11 08:00:50

标签: c

当我执行这个程序时,k值应该像0,1,2,3,而是显示k的一些随机值。 在执行for循环后,' i'的值没有变化。如果' i'的初始值执行for循环100次后,该值为' i'仍然是0。

输入-asd

输出-12345678910111213

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

int main()
{
    int i,k=0;
    char array[100];
    scanf("%s",&array);

    for(i=0;i<=99;i++)
    {
        if(array[i]>='a'&&array[i]<='z')
        {
            k=k+1;
            printf("%d",k);
        }
    }
}

2 个答案:

答案 0 :(得分:0)

以下内容可行。

#include<stdio.h>
#include<ctype.h>
int main()
{
    int i,k=0;
    char array[100];

    scanf("%s", array);
    for(i=0;array[i] != '\0';i++)
    {
        if(array[i]>='a'&&array[i]<='z')
        {
            k=k+1;
            printf("%d",k);
        }
    }

   return 0; 
}

答案 1 :(得分:0)

  1. 不要使用for循环到99.你只想继续输入字符串的结尾,即直到找到零终止。

  2. 永远不要scanf("%s", array);,因为输入的长度没有限制。用户可以通过键入长于100的字符串来溢出数组。

  3. 对于问题1)您可以使用while和问题2)使用fgets因为它允许您指定最大字符数

    然后你的代码看起来像:

    #include<stdio.h>
    #include<ctype.h>
    
    int main()
    {
        int i=0,k=0;
        char array[100];
        fgets(array, sizeof(array), stdin);
        while(array[i])
        {
            if(array[i]>='a' && array[i]<='z')
            {
                k=k+1;
                printf("%d",k);
            }
            i = i +1;
        }
        printf("\n");
    }