• c/c++ 字符和字符串读入小结(gechar cin getline gets) by slj



    getchar:

      逐个字符读入,可以读入一切字符,包括空格符和回车符。这个函数很通用,可以代替以下所有函数。注意getchar连回车符都接受,接受回车符意味着可以判断读入的字符是不是' '。但以下所有函数都不接受空格符和回车符。

      用法:char ch; ch=getchar();
    cin:

      既可以读字符,又可以读字符串。不接受空格符和回车符。
      如果程序需要逐个读字符,可以用cin。用法:char ch; cin>>ch; 
      如果程序需要读入空格为结束符的字符串,一行输入多个字符串,字符串之间以空格为间隔。比如一行输入多个姓名,程序按姓名排序。

      用法:char s[20];循环中调用cin>>s ; 或者string s; 循环中调用cin>>s;

    getline(cin,str):

      以回车符为结束符 ,可以读入一个以回车符为结束符的string(c++风格字符串)。需要include <string>

      用法:string str; getline(cin,str); 

    gets:

      以回车符为结束符 ,所以可以读入一个以回车符为结束符的c风格字符串 

    (1) 有时候,我们需要读入一行,将这一行的字符(可能包含空格)做为一个字符串,那么可以用一下三种方法 
      getline(cin,str) 
      gets:
      getchar:用循环处理

      示范代码如下:

    #include<iostream>
    #include<cstdio>
    #include<string>
    using namespace std;
    int main()
    {
    /*
    //读入一个以回车符为结束符的字符串:方法1:需要#include<string>
        string a;
        getline(cin,a);
        cout<<a;
    */
    
    /*
    //读入一个以回车符为结束符的字符串:方法2:需要#include<iostream> 或    #include<cstdio>
        char s[20];
        gets(s);
        printf("%s",s);//或者cout<<s;
    */
    
    /* 
    //读入一个以回车符为结束符的字符串:方法3:需要#include<iostream> 或    #include<cstdio>
        char ch,s[20];
        int i=0;
        while((ch=getchar())!='
    ') //注意, (ch=getchar())一定要有括号 
        {
            s[i++]=ch;
            //cout<<i;
        }
        s[i]='';
        printf("%s",s);//或者cout<<s;
    */
    
        return 0;
    }


    (2) 有时候,我们需要逐个读入字符,可以根据情况灵活选择用getchar 和 cin,但是要注意它们有很重要的区别

      如果程序需要接受回车符,那么用getchar方便书写代码。

      如果程序不需要接受回车符,那么用cin比较方便。

      以下示范代码说明了cin和getchar在逐个字符读入时的区别:

    #include<iostream>
    using namespace std;
    int main()
    {
    /*
    //如果统计字符个数,输入 i am a stu后,按回车,以ctrl+z结束,结果为 7
    char ch;
    int i=0;
    while(cin>>ch) i++;
    cout<<i;
    */

    /*
    //如果统计字符个数,输入 i am a stu后,以回车符结束,结果为10
    char ch;
    int i=0;
    while((ch=getchar())!=' ') i++;
    cout<<i;
    */

    //如果统计单词数目,输入 i am a stu后,按回车,以ctrl+z结束,结果为 4
    char s[20];
    int i=0;
    while(cin>>s) i++;
    cout<<i;
    return 0;
    }

      比如:NOIP2015地雷游戏,每一行中字符之间没有空格,行尾有回车符。最好用cin,因为如果用getchar(),读入程序的内循环的条件循环变量<=原有的列数+1,你还需要判断读入的是不是回车符或者做其他的处理。
      地雷游戏读入地图代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    bool a[105][105];//一张地图,有雷为一,无雷为零 
    int main()
    {
        memset(a,0,sizeof(a));//地图最开始清空 
        int n,m;
        char tmp;
        cin>>n>>m; 
        for(int i=1;i<=n;i++)//读入地图 
        {
            for(int j=1;j<=m;j++) 
            {
                cin>>tmp;//读入每一个点 
                if(tmp=='*') a[i][j]=1;//如果是地雷就将这个点设为一 
            }
        }
        
    }

     (3)有时候,我们需要读入一行字符,这一行字符中包含以空格为间隔的多个字符串。

      比如:输入一个英文句子,统计单词的数量。

      这种情况,不能用gets,getline,可以用getchar,cin,但从代码书写方面来看cin最方便,当然用getchar会使得程序运行更快

      用法:循环中调用cin。while(cin>>str) 。如果事先不知道一行中字符或字符串的数量,则输入完先回车,再以ctrl+z结束。代码见(2)

      

  • 相关阅读:
    POJ2888 Magic Bracelet [矩阵快速幂+Burnside+欧拉函数]
    数列的 GCD [计数问题]
    com组件的注册
    WCF 传输和接受大数据
    数据库中已存在名为 'View_Business' 的对象。
    windows 两个用户,默认其中一个用户登录
    用C#读取,写入ini文件
    小心得,关于串口
    未能加载文件或程序集"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad
    无法激活服务,因为它不支持 ASP.NET 兼容性
  • 原文地址:https://www.cnblogs.com/StoneXie/p/9603266.html
Copyright © 2020-2023  润新知