• 牛客网编程界面输入输出处理


    输入

    • 建议用while(cin)的形式

    几乎所有的输入都是数字或者字符串,根据数字和字符串可以将输入分为几种情况:

    1.先说数字(通常给定一组数,或者给定给一个数组)

    (1)直接输入一个数,对该数字进行一些操作,例如判断是否是素数,立方根等,这种类型只需要输入一个数即可,可用以下几种输入:

    int N;//定义一个输入变量用于接收系统输入的数字
    cin >> N;//方式一,直接输入,再执行相应操作
    while (cin >> N) {
    	//方式二,将输入放在while后面,这种方式推荐大家用,因为C++的输入是流的方式,因此用while来判断接收是比较常用的方法,不容易出错(一些情况下只能用这种输入,所以推荐用这种,包括后面的字符串)
    }
    

    (2)给定一个数,表示有多少组数(可能是字符和数字的组合)

    /*举个例子,输入一个数N表示学生人数,然后输入每个学生的姓名和学号,要求按学号降序打印每个学生的信息,例子如下:
    输入:
    3
    liming,1410
    zhangsan,1562
    lisi,1355
    输出:
    zhangsan,1562
    liming,1410
    lisi,1355*/
    //对于上例,输入一般采用以下的方法:
    int N;//学生总数
    while (cin >> N) { //while里面输入总数,然后在该循环里面处理
    	for (int i=0; i<N; i++){ //用for循环输入N组数据
    		cin >> stu[i].name >> stu[i].num;//输入姓名和学号
    	}
    }
    //也可以不用while循环(不推荐,除非用while不好处理或者处理不了)
    int N;
    cin >> N;
    for (int i=0; i<N; i++){ //用for循环输入N组数据
    	cin >> stu[i].name >> stu[i].num;//输入姓名和学号
    }
    //这种方式看似很直观易懂,但这种方式对于系统里的测试用例来说可能不太友好,一般C++的输入都强调流的概念,这种方式只能某些情况下可以使用,大家可以自己多刷一刷,就会发现这种方式经常会遇到莫名其妙的错误
    

    3)可能直接就是要求输入一组数,并不告知具体的数量,以(2)的例子为例,如果不告诉你多少个学生,你就无法根据学生数量用for循环输入了,这时候用while循环就可以很好地处理(流的处理模式)

    string name;//定义姓名变量
    int num;//定义学号变量
    while(cin >> name >> num) {//输入一组,处理一组
    	student s = {name,num};
    	Input.push_back(s);//用一个结构体数组来接收输入的学生信息即可
        //....
    }
    

    2. 再说字符(串)(很常见)

    (1)给定字符(串),进行相关地处理

    //给定字符
    char ch;
    cin >> ch;//方式一
    while (cin.get(ch))//方式二
    //给定字符串
    string input;
    getline(cin,input);//方式一
    cin >> input;//方式二
    while(方式一/方式二) //方式三
    //还是推荐用方式三的输入方式,不容易出错,字符串的一些题目用方式一和方式二可能会出错(由于输入格式的问题)
    

    (2)给定不止一组字符串,告知大小

    //举个例子,先输入一个数表示有多少个字符串,再输入每个字符串,根据字符串长度排序
    int N;//定义数量
    string temp;//字符串变量
    while (cin >> N){ //输入数量
    	vector<string> input; //存储所有的字符串
    	for(int i=0; i<N; i++){
    		cin >> temp; //输入字符串
    		input.push_back(temp);//保存
    	}
    }
    //下面是另一种不安全的写法
    int N;//定义数量
    cin>>N;//输入数量
    string temp;//字符串变量
    vector<string> input; //存储所有的字符串
    for(int i=0; i<N; i++){
    	cin >> temp; //输入字符串
    	input.push_back(temp);//保存
    }
    //以该例题为例,可能在本地IDE能得到正确答案,但如果是牛客网系统,由于输入格式的问题,这样写编译会通过,就是得不到正确答案
    

    (3)输入一组字符串,不告知大小,仍然以上个例子举例,不告诉你有多少字符串,这样就不能根据数量来用for循环做了,但可以用while循环处理

    string temp;//字符串变量
    vector<string> input; //存储所有的字符串
    while(cin >> temp){ //输入数量
    	input.push_back(temp);//保存
    	//...
    }
    

    输出

    C++的输出cout与输入cin一样都是用流来控制的,cin和cout都在iostream这个头文件中,命名空间为std,因此使用的时候都要加上头文件和命名空间。输出相对来说简单一些,不会出现输入的一些问题,相反,cout输出有时候还可以帮助你解决题目,一下列举一些常见输出语句

    //输入一个数字再输出
    int num;//定义
    cin >> num;//输入
    cout << num << endl;//输出并且换行
    
    //输入一个字符串再输出
    string input;//定义
    cin >> input;//输入
    cout << input<< endl;//输出并且换行
    
    //输入输出多个数据
    int num1,num2;
    string s1,s2;
    cin >> num1 >> s1;
    cin >> num2 >> s2;
    cout << num1 << s1 << ' ' << num2 << s2 << endl;
    

    链表处理

    定义链表对应的结构体

    struct ListNode
    {
        int value;
        ListNode *next;
        //构造函数
        ListNode(int valuel, ListNode *nextl = nullptr)
        {
            value = value1;
            next = next1;
        }
    };
    
    //可以用以下两种方法创建链表节点
    ListNode *secondPtr = new ListNode(13.5);
    ListNode *head = new ListNode(12.5, secondPtr);
    //等价于以下两句
    ListNode *head = new ListNode(13.5);
    head = new ListNode(12.5, head);
    

    删除链表,注意内存释放

    //先构造一个临时节点,用来记录下一个位置,再依次删除链表节点,最后删除该临时节点
    void releaseNode(ListNode* node)
     {
         //创建临时节点
         ListNode* temp = NULL; 
         if(node == NULL)
         {
             cout << "链表节点内存为空
    ";
         }
         else
         {
             while(node != NULL)
             {
                 temp = node;
                 node = node ->next;
                 delete temp;
                 cout << "节点内存清除成功
    ";
             }
         }
     }
    
  • 相关阅读:
    NSDate的处理:前一天、后一天等关于时区偏移的处理以及在数据库中的使用
    《powershell 的版本号所引起的载入 FSharp 编译器问题》基本解决
    hdu 2055 An easy problem (java)
    昨天登陆页面,无法进入后台,今天攻克了
    关于ubuntu下qt编译显示Cannot connect creator comm socket /tmp/qt_temp.xxx/stub-socket的解决的方法
    (转)Struts2的拦截器
    (转)Struts2的标签库
    (转)OGNL与值栈
    (转)Struts2访问Servlet的API及......
    (转)Struts2快速入门
  • 原文地址:https://www.cnblogs.com/huhu555/p/14643422.html
Copyright © 2020-2023  润新知