C语言-读入含空格的字符串

题目

输入一行字符,统计其中英文字母、空格、数字和其它字符的个数。

思路

  1. 没说到底输入几个字符,无法用循环给数组赋值

解决:

定义足够大的数组,然后以%s为输入格式,一次性输入字符。然后再通过访问数组的每个元素得到其ASCII码,通过条件控制语句输出。

#include 
int main(void) {
      char str1[5];  
      scanf(%s”,str1);//注意:不用加&  
      printf("%s\n", str1);     
      return 0; 
}

scanf()进行读取时,输入参数是已经定义好的“字符数组名”, 不用加&, 因为在C语言中数组名就代表该数组的起始地址。

  1. scanf()遇见空格就停止读取,无法统计空格的数目。

解决:

用gets()函数的话,遇到空格就不会返回了,遇到回车才返回。

#include 
int main(void) {
      char str1[5];  
      gets(str1);//与scanf的写法不同  
      printf("%s\n", str1);     
      return 0; 
}

代码

#include
#include
int main()
{
    char str[200];
    gets(str);//gets()和scanf()的输入格式不同。此处若用scanf()则总在空格键入时停止输入
    int n=strlen(str);
    int a[n];
    for(int i=0;i<n;i++){
        a[i]=str[i];
    }
    int w=0,x=0,y=0,z=0;
    for(int j=0;j<n;j++){
        if(a[j]>=65&&a[j]<=90){
            w++;
        }
        else if(a[j]>=97&&a[j]<=122){
            w++;
        }
        else if(a[j]==32){
            x++;
        }
        else if(a[j]>=48&&a[j]<=57){
            y++;
        }
        else{
            z++;
        }
    }
    printf("%d\n%d\n%d\n%d",w,x,y,z);
}

参考资料

  1. http://m.biancheng.net/view/232.html
  2. https://zhidao.baidu.com/question/54103433.html

你可能感兴趣的:(C语言,c语言)