zoukankan      html  css  js  c++  java
  • C++输入

    整行读取

    1. std::getline
    string s;
    	getline(cin, s);
    	cout << s << endl;
    
    1. 利用 scanf 的正则特性
    char s[100];
    	scanf("%[^
    ]%*c", s);
    	printf("%s
    ", s);
    
    1. std::gets (deprecated)
    char s[100];
    	gets(s);
    	printf("%s
    ", s);
    
    1. cin.get (std::basic_istream::get)
    char s[100];  
    	cin.get(s,100);
    	printf("%s
    ", s);
    
    1. cin.getline (std::basic_istream::getline)
    char s[100];
    	cin.getline(s, 100);
    	printf("%s
    ", s);
    

    比较常用的自然是方法1,简单省事儿。

    比较一下上述方法4和方法5:

    cin.get 可以有1个、2个、3个…参数,这里用的是2个参数的形式。

    此时它和cin.getline的两个形参是相同格式的:basic_istream& get(char_type* s, streamsize count)

    不同点在于:

    1. 输入字符串不超过指定值时:(包含直接按回车的情况)

    get(char*, size) 遇到' '停止,但不会从输入流中删去' ',这就可能影响后面的读取操作;

    getline(char*, size) 也是遇到' '停止,但它会从输入流删去' '

    2) 输入字符串长度超过指定值:

    都是获取size-1个字符,然后加上'',总体长度是size。然后get依然不去掉' ',而getline也不去掉' ',但它会关闭输入流。

    其他无需过多了解,此处不表。

    refer to: https://blog.csdn.net/yo_bc/article/details/72617275



    ## 处理以逗号分隔的数据

    以逗号分隔的数字(或char):使用cin.get跳过逗号

    vector<int> data;
    	int tmp;
    	while (cin>>tmp){
    		data.push_back(tmp);
    		if (cin.get() == '
    ') break;  // replace break with your code
    	}
    

    以逗号分隔的字符串:使用getline指定分隔符

    vector<string> data;
    	string tmp;
    	while (getline(cin,tmp,',')){
    		data.push_back(tmp);
    	}
    

    https://blog.csdn.net/weixin_43821376/article/details/100490943

    此外还可以:

    使用scanf:"%d,"

    scanf("%d,", &i);  // "%d,": 空格和逗号都可处理,但外层循环要指明循环次数,否则不知道什么时候结束
    


    ## scanf和sscanf的简单正则支持
    /**  输入语句的简单正则  **/
    // sscanf从字符串输入,scanf从stdin输入
    // 二者都支持简单的正则: (https://www.cnblogs.com/youthlion/archive/2009/06/21/1507586.html)
    string s1 = "notepad=v1.0.0.1001";
    char version_info[30];
    sscanf(s1.c_str(), "%*[^=]%*c%s", version_info); // v1.0.0.1001,%*c跳过一个字符,即“=v...”的=
    cout << version_info << endl;
    sscanf(s1.c_str(), "%*[^=]=%s", version_info);  // 同上, *是跳过,[]是正则内容,是前闭后开区间
    cout << version_info << endl;
    
    char name3[20];
    scanf("%*[^.]%s", name3); // 跳过第一个点号之前的内容,把第一个点号和之后的内容保存到name3,没输入点号就不停
    cout << "name3: " << name3 << endl;
    // cout << "转为string: " << string(name3);
    
  • 相关阅读:
    ClickOnce發布經驗
    reporting Server組件不全引起的致命錯誤
    異步調用
    Usercontrol Hosted in IE
    MATLAB命令大全(转载)
    一种保护眼睛的好方法
    关于oracle自动编号
    An Algorithm Summary of Programming Collective Intelligence (1)
    An Algorithm Summary of Programming Collective Intelligence (3)
    An Algorithm Summary of Programming Collective Intelligence (4)
  • 原文地址:https://www.cnblogs.com/dylanchu/p/11546456.html
Copyright © 2011-2022 走看看