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);
    
  • 相关阅读:
    ArcEngine 一些实现代码(转载)
    关于GIS支持的地理数据源的命名空间
    SpringBoot-Web配置
    RedisGeo
    JedisCluster
    Java并发编程:Lock
    java并发编程:线程变量-ThreadLocal类
    java并发编程:线程池-Executors
    解决Mybatis配置ORM映射 时分秒都为0
    Kafka的存储机制以及可靠性
  • 原文地址:https://www.cnblogs.com/dylanchu/p/11546456.html
Copyright © 2011-2022 走看看