• ACM模式各种输入整理(C++)


    1.前言

    本文整理ACM模式的各种输入形式。

    2. ACM模式的输入种类

    2.1 整形数组输入

    2.1.1 在终端的一行中输入固定数目的整型数字,并存到数组中,中间以空格分隔

    示例:

    • 3
    • 1 2 3

    方法1

    1. #include
    2. #include
    3. using namespace std;
    4. int main(){
    5. int n;
    6. cin >> n;
    7. vector<int> nums(n);
    8. for (int i = 0; i < n; ++i){
    9. cin >> nums[i];
    10. }
    11. //测试:打印数组
    12. cout<<"test c++ input:"<
    13. for(auto i : nums)
    14. cout << i << " ";
    15. cout << endl;
    16. }

    方法2 

    1. #include
    2. #include
    3. using namespace std;
    4. int main(){
    5. int n;
    6. cin >> n;
    7. vector<int> nums;
    8. nums.resize(n);
    9. for (int i = 0; i < n; ++i){
    10. cin >> nums[i];
    11. }
    12. //测试:打印数组
    13. cout<<"test c++ input:"<
    14. for(auto i : nums)
    15. cout << i << " ";
    16. cout << endl;
    17. }

    方法3

    1. #include
    2. #include
    3. using namespace std;
    4. int main(){
    5. int n;
    6. cin >> n;
    7. vector<int> nums;
    8. for (int i = 0; i < n; ++i){
    9. int val;
    10. cin >> val;
    11. nums.push_back(val);
    12. }
    13. //测试:打印数组
    14. cout<<"test c++ input:"<
    15. for(auto i : nums)
    16. cout << i << " ";
    17. cout << endl;
    18. }

     正确性测试:

    1. C:\Users\zhangyy\CLionProjects\Ctest\cmake-build-debug\Ctest.exe
    2. 3
    3. 1 2 3
    4. test c++ input:
    5. 1 2 3

    2.1.2 在终端的一行中输入非固定数目的整型数字,并存到数组中,中间以空格(或者其他单字符,./)分隔

    方法1

    1. #include
    2. #include
    3. using namespace std;
    4. int main(){
    5. vector<int> nums;
    6. int num;
    7. while(cin>>num){
    8. nums.push_back(num);
    9. if(getchar() == '\n')
    10. break;
    11. }
    12. //测试:打印数组
    13. cout<<"test c++ input:"<
    14. for(auto i : nums)
    15. cout << i << " ";
    16. cout << endl;
    17. }

    方法2

    1. #include
    2. #include
    3. using namespace std;
    4. int main(){
    5. //代码通过cin.get()从缓存中读取一个字节,这样就扩充了cin只能用空格和TAB两个作为分隔符。
    6. vector<int> nums;
    7. int num;
    8. while(cin>>num){
    9. nums.push_back(num);
    10. if(cin.get() == '\n')
    11. break;
    12. }
    13. //测试:打印数组
    14. cout<<"test c++ input:"<
    15. for(auto i : nums)
    16. cout << i << " ";
    17. cout << endl;
    18. }

    正确性测试:

    1. C:\Users\zhangyy\CLionProjects\Ctest\cmake-build-debug\Ctest.exe
    2. 1 2 3 4
    3. test c++ input:
    4. 1 2 3 4

    2.1.3 在终端的一行中输入固定数目的整型数字,并存到数组中,中间以(其他单字符,./)分隔

    示例:

    • 3
    • 1,2 ,3
    1. #include
    2. #include
    3. using namespace std;
    4. int main(){
    5. int m;
    6. cin >> m;
    7. char sep;
    8. vector<int> nums(m);
    9. for (int i = 0; i < m - 1; ++i){
    10. cin >> nums[i] >> sep;
    11. }
    12. cin >> nums[m - 1];
    13. //测试:打印数组
    14. cout<<"test c++ input:"<
    15. for(auto i : nums)
    16. cout << i << " ";
    17. cout << endl;
    18. }

    正确性测试:

    1. C:\Users\zhangyy\CLionProjects\Ctest\cmake-build-debug\Ctest.exe
    2. 3
    3. 1,2,3
    4. test c++ input:
    5. 1 2 3

    2.2 字符串输入

    2.2.1 给定一行字符串,每个字符串用空格间隔,一个样例为一行

    示例:

    • daa ma yello

    方法

    1. #include
    2. #include
    3. using namespace std;
    4. int main(){
    5. string str;
    6. vector strs;
    7. while (cin >> str) {
    8. strs.push_back(str);
    9. if (getchar() == '\n') { //控制测试样例
    10. for (auto& str : strs) {
    11. cout << "current character:"<< str << " ";
    12. }
    13. cout << endl;
    14. strs.clear();
    15. }
    16. }
    17. return 0;
    18. }

    正确性测试:

    1. C:\Users\zhangyy\CLionProjects\Ctest\cmake-build-debug\Ctest.exe
    2. aaa bbb
    3. current character:aaa current character:bbb

    2.2.2 给定一行字符串,每个字符串用逗号间隔,一个样例为一行

    方法:使用getline 读取一整行字符串到字符串input中,然后使用字符串流stringstream,读取单个数字或者字符。每个字符中间用','间隔

    1. #include
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. int main(){
    7. string input;
    8. while (getline(cin, input)) { //读取一行
    9. vector strs;
    10. string str;
    11. stringstream ss(input);
    12. while(getline(ss, str,',')){
    13. strs.push_back(str);
    14. }
    15. sort(strs.begin(), strs.end());
    16. for (auto& str : strs) {
    17. cout << str << " ";
    18. }
    19. cout << endl;
    20. }
    21. return 0;
    22. }

    正确性测试:

    1. C:\Users\zhangyy\CLionProjects\Ctest\cmake-build-debug\Ctest.exe
    2. d,v,b,c,f
    3. b c d f v

    2.2.3 给定一行字符串,每个字符串用空格间隔,一个样例为一行

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. int main(){
    6. string input;
    7. while (getline(cin, input)) { //读取一行
    8. stringstream data(input); //使用字符串流
    9. int num = 0, sum = 0;
    10. while (data >> num) {
    11. sum += num;
    12. }
    13. cout << sum << endl;
    14. }
    15. return 0;
    16. }

    正确性测试:

    1. C:\Users\zhangyy\CLionProjects\Ctest\cmake-build-debug\Ctest.exe
    2. 1 2 3
    3. 6

    2.3 字符串输入到数组

    2.3.1 输入n行字符串,逗号分开,存到数组里

    示例(假定每行输入5个数)

    3

    1,2,3,3,2

    4,5,6,1,3

    7,8,9,3,4

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int n;
    6. cin >> n;
    7. vectorint>> vec(n,vector<int>(5));
    8. for (int i = 0; i < n;++i){//注意这里一定要有i控制,用while容易一直输入导致错误
    9. string s;
    10. cin >> s;
    11. replace(s.begin(), s.end(), ',', ' ');
    12. istringstream input(s);
    13. string tmp;
    14. for (int j = 0; j < 5;++j){//内层循环也很重要
    15. input >> tmp;
    16. vec[i][j] = stoi(tmp);
    17. }
    18. }
    19. for (int i = 0; i < vec.size(); i++)
    20. {
    21. for (int j = 0; j < vec[0].size(); j++)
    22. {
    23. cout << "postion "<< i << j << " output is:"<< vec[i][j] << endl;
    24. }
    25. }
    26. return 0;
    27. }

    正确性测试

    1. C:\Users\zhangyy\CLionProjects\Ctest\cmake-build-debug\Ctest.exe
    2. 2
    3. 1,2,3,4,5,
    4. 6,7,8,9,0
    5. postion 00 output is:1
    6. postion 01 output is:2
    7. postion 02 output is:3
    8. postion 03 output is:4
    9. postion 04 output is:5
    10. postion 10 output is:6
    11. postion 11 output is:7
    12. postion 12 output is:8
    13. postion 13 output is:9
    14. postion 14 output is:0
    15. Process finished with exit code 0

    3. 最后

    相对于leetcode模式,ACM模式需要自己写输入输出,但是常见输入输出也是几类。熟悉后,就不会在这方面浪费宝贵的时间了。

  • 相关阅读:
    技术干货 | 基于MindSpore的图算融合探索和实践
    二叉树的遍历与构建问题
    在 vue3 中使用高德地图
    OpenCV实战(2)——OpenCV核心数据结构
    【UNI】底部梯形按钮组件
    ctrlz删除的文件怎么恢复?
    vscode config
    暑期JAVA学习(42.2)TCP通信实战案例——模拟BS系统
    三款数据可视化工具深度解析:Tableau、ECharts与山海鲸可视化
    WEB自动化_键盘事件(输入内容、全选、退格、回车、删除等)
  • 原文地址:https://blog.csdn.net/qq_33163046/article/details/128066918