zoukankan      html  css  js  c++  java
  • C/C++带有空格的字符串输入

    一、带有空格的字符串输入

    (一)C++篇

    1. 针对字符数组而言

    • 方法一 getline()
      读入整行数据,使用回车键输入换行符来确定输入结尾。
      调用方法:
    cin.getline(str,len)

    第一个参数存储输入行的数组名称
    第二个参数是要读取的字符数

    举个栗子:

    int main()
    {
        char str[100];
        cin.getline(str,111);
        cout<<str<<endl;
        return 0;
    }
    • 方法2 cin.get(str,len)
      举个栗子:
    int main()
    {
        char str[100];
        cin.get(str,111);
        cout<<str<<endl;
        return 0;
    }
    

    两者都是读取一行输入,直至换行符
    但是,getline() 将换行符丢弃,而get()将换行符保留在输入序列中

    2. 对于string类

    • 方法1 getline(cin,str)
      举个栗子:
    int main()
    {
        string str;
        getline(cin,str);
        cout<<str<<endl;
        return 0;
    }

    (二) C语言篇

    c语言输入使用scanf函数,但scanf默认输入碰到回车和空格是输入不同组之间的间隔和结束符号,所以输入带有空格,tab或者回车的字符串是不可以的,解决方法如下。

    1. 利用正则表达式

    利用格式符“%[] ”它的作用扫描字符串集合。scanf("%[^c]",str);
    其中”c” 是一个具体的字符常量(包括控制符)。
    举个栗子:

    int main()
    {
       char *msg=NULL;
       msg=(char *)malloc(100*sizeof(char));
       scanf("%[^
    ]",msg);
       printf("%s",msg);
        return 0;
    }

    2. 使用gets()函数

    gets()函数是以回车符作为结束符
    本函数不建议使用,因为在codeblocks已经无法使用

    二、先输入一个整数后,再输入一个带空格的字符串

    int i=0;
    string data;
    cin>>i;
    cin.get();  //这应该懂吧,读取换行符,因为换行符在你按回车时还在输入队列中
    getline(cin,data);  //正因为cin.get()将换行符读取了,这行代码可以读取一行,否则将直接读取换行符,这样子这一行的内容都存进data字符变量中
    cout<<i<<endl<<data;
    return 0;
  • 相关阅读:
    UVA 12307 Smallest Enclosing Rectangle
    UVALive 4728 Squares
    扩栈代码
    uva 10256 The Great Divide
    uva 11168 Airport
    uva 10625 Board Wrapping
    bzoj千题计划206:bzoj1076: [SCOI2008]奖励关
    NOIP2017 列队
    bzoj3529: [Sdoi2014]数表
    bzoj1966: [Ahoi2005]VIRUS 病毒检测
  • 原文地址:https://www.cnblogs.com/bryce1010/p/9386993.html
Copyright © 2011-2022 走看看