• C++(六)— 输入方式


    1、输入包含空格的字符串

      使用 getline(cin, str)读取一行字符串,遇到换行符停止;cin>>str,是遇到空格就停止。

    实现:输入两个字符,在第一个字符中删除第二个字符中出现的所有字符。
    int
    main() { string str1; string str2; getline(cin, str1);//输入是“abc smd djndje” getline(cin, str2); map<char, int> m; for (int i = 0; i < str2.size(); ++i) m[str2[i]]++; for (int i = 0; i < str1.size(); ++i) { if (m.count(str1[i]) == 1) { str1.erase(i, 1); //这里删除后,索引要减一 i--; } } cout << str1; cout << endl; system("pause"); return 0; }

    2、第一行输入数组长度,第二行数组

    例:

    3

    1  2  3

    cout << "please input the number of vector's element" << endl;
        int num;
        cin >> num;
        vector<int> v;
        int temp;
        for (int i = 0; i < num; ++i)
        {
            cin >> temp;
            v.push_back(temp);
        }
        for (int i = 0; i < v.size(); i++)
        {
            cout << v[i] << " ";
        }

    3、输入一组数,不知道长度,遇到回车结束

    例:

    1  2  3 回车

        vector<int> v;
        int temp;
        while(cin>>temp)
        {
            v.push_back(temp);
            //等价于if (cin.get() == '
    ') 
            if (getchar() == '
    ') //遇回车结束
                break;
        }
        for (int i = 0; i < v.size(); i++)
        {
            cout << v[i] << " ";
        }

     4、输入一维数组,保存到 vector 中

    例:

    输入:[11,33,55,666]
    输出:11 33 55 666
    #include <vector>
    #include <string>
    #include <iostream>
    using namespace std;
    
    void SplitString(const string& s, vector<int>& v, const string& c)
    {
        int  pos1=0, pos2;
        pos2 = s.find(c);
        while (string::npos != pos2)
        {
            v.push_back(stoi(s.substr(pos1, pos2 - pos1)));
            pos1 = pos2 + c.size();
            pos2 = s.find(c, pos1);
        }
        if (pos1 != s.length())//如果有最后一个数,将其加入到数组中
            v.push_back(stoi(s.substr(pos1)));
    }
    
    int main() {
        string s = "[11,33,55,666]";
        s = s.substr(1, s.size() - 2);
    
        vector<int> v;
        SplitString(s, v, ","); //可按多个字符来分隔;
        for (int i = 0; i < v.size(); ++i)
            cout << v[i] << " ";
        cout << endl;
        //输出: a b c d e f
    }

      或者使用getline()函数

    vector<int> stringToIntegerVector(string input) {
        vector<int> output;
        input = input.substr(1, input.length() - 2);
        stringstream ss;
        ss.str(input);
        string item;
        char delim = ',';
        while (getline(ss, item, delim)) {
            output.push_back(stoi(item));
        }
        return output;
    }
    
    int main() {
        string line;
        while (getline(cin, line)) {
            //将输入的字符串转换为数组
            // [1,2,3,4] -> 存入到 vector 数组中
            vector<int> nums = stringToIntegerVector(line);
    
            int ret = Solution().maxProduct(nums);//你自己的计算函数
    
            string out = to_string(ret);
            cout << out << endl;
        }
        return 0;
    }

    5、上面4的另一种写法,输入字符,保存字符

       区别:getline()的方法只能用单个字符来进行分割。getline每遇到一个行分割符都会返回一次,所以对于分割符连续的情况就束手无策了。

    #include <vector>
    #include <string>
    #include <iostream>
    #include <sstream>
    using namespace std;
    
    void split(const string &s, vector<string> &v, char c) {
        stringstream ss;
        ss.str(s);
        string item;
        while (getline(ss, item, c)) {
            v.push_back(item);
        }
    }
    
    int main()
    {
        string line = "asd fasdf fadf fa";
        vector<string> strs;
        split(line, strs, ' ');
        for (auto &s : strs) {
            cout << s << endl;
        }
        return 0;
    }

    6、 输入二维数组,保存到vector矩阵中

    例:

    输入:[[1,2,3],[4,5,6]]
    输出:保存到二维数组矩阵中
    //[[1,3,1],[1,5,1],[4,2,1]] -> 保存到二维数组中
    vector<vector<int>> stringToIntegerMatrix1(string input)
    {
        vector<vector<int>> output;
        vector<int> temp;
        input = input.substr(2, input.length() - 4);
        stringstream ss;
        ss.str(input);
        string item;
        char delim = '[';
        while (getline(ss, item, delim)) {
            item = item.substr(0, item.length() - 2);
            temp = stringToIntegerVector(item);
            output.push_back(temp);
        }
        return output;
    }

    7、获取数组长度

    #include<iostream>
    #include<stdio.h>
    //获取数组的长度
    template<typename T>
    int count(T& x)
    {
        int s1 = sizeof(x);
        int s2 = sizeof(x[0]);
        int result = s1 / s2;
        return result;
    }

    1、基本用法

    最基本,也是最常用的用法。

           //输入数字
        int a, b;
        cin >> a >> b;
        cout << a << '
    ' << b << '
    ' << endl;
    
        //输入abcds,输出 a ,只能获取一个字符
        char ch;
        ch = cin.get();
        cout << ch << endl;
        
        char ch1[10];
        cin.get(ch1, 5);//输入 abcdefg,输出  abcd,还有一个保存‘’
        cout << ch1 << endl;
    
        //输入字符串,回车结束
        string str;
        cin >> str;
        cout << str << endl; 

      区别:

      (1)cin.get(arrayname,size)当遇到[enter]时会结束目前输入,他不会删除缓冲区中的[enter]

      cin.getline(arrayname,size)当遇到[enter]时会结束当前输入,但是会删除缓冲区中的[enter]

    /*
        输入:12345[enter]
        输出:12345 【换行】 10
    
        说明:cin.get(a,10)把12345到a中,
        遇到[enter]结束,但是不把[enter]删除,
        则把[enter]输入到b中,(enter的ASCALL码为10)
        */
        char a[10]; char b;
        cin.get(a, 10);
        cin.get(b);
        cout << a << endl << int(b);
    /*
        输入:12345[enter]a[enter]
        输出:12345【换行】97
    
        说明:cin.getline(a,10)吧12345输入到a中,遇到{enter}结束,
        并把缓冲区中[enter]删除,把接下来的a输入到b中
        */
        char a[10]; char b;
        cin.getline(a, 10);
        cin.get(b);
        cout << a << endl << int(b);

      (2)cin.getline(arrayname,size,s)当遇到s时会结束输入,并把s从缓冲区中删除

      cin.get(arrayname,size,s)当遇到s时会结束输入,但不会删除缓冲区中的s

    /*
        输入:12345,[enter]
        输出:12345【换行】 ,
    
        说明:cin,get不会删除缓冲区的,
        */
        char a[10]; char b;
        cin.get(a, 10, ',');
        cin.get(b);
        cout << a << endl << b;
    /*
        输入:12345,[enter]
        输出:12345【换行】10
        
        说明:cin.getline吧12345输入到a中,遇到’,
        ‘结束,并删除缓冲区的’,‘,后面的[enter]输入到b中
        */
        char a[10]; char b;
        cin.getline(a, 10, ',');
        cin.get(b);
        cout << a << endl << int(b);

      应用举例:输入五个学生的名字,每个学生的名字不超过10个字符,输入时学生名字之间用逗号隔开,把这五个名字存储并换行输出

    char a[5][10];
        int i;
        for(i=0;i<4;i++)
            cin.getline(a[i],10,',');
        cin.getline(a[i],10);
     
        for(i=0;i<5;i++)
            cout<<a[i]<<endl;
  • 相关阅读:
    javascript学习随笔《四》
    google卫星地图地图矫正
    sharpmap v2学习研究(二)
    c#中的位运算,逻辑非~,逻辑与&,逻辑或|,逻辑异或^,逻辑左移<<,逻辑右移>>
    如何判断一个form是否被关闭
    List转DataTable(反射)
    c#位运算
    解决ASP.NET中的各种乱码问题 转自 Fish Li
    IHE自测MESA环境搭建详解
    HTTP协议请求 转
  • 原文地址:https://www.cnblogs.com/eilearn/p/9398561.html
Copyright © 2020-2023  润新知