zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    OA办公系统 Springboot Activiti6 工作流 集成代码生成器 vue.js 前后分离 跨域
    java企业官网源码 自适应响应式 freemarker 静态引擎 SSM 框架
    java OA办公系统源码 Springboot Activiti工作流 vue.js 前后分离 集成代码生成器
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    java 视频播放 弹幕技术 视频弹幕 视频截图 springmvc mybatis SSM
    最后阶段总结
    第二阶段学习总结
    第一阶段学习总结
  • 原文地址:https://www.cnblogs.com/eilearn/p/9398561.html
Copyright © 2011-2022 走看看