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

输入

  • 建议用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 << "链表节点内存为空\n";
     }
     else
     {
         while(node != NULL)
         {
             temp = node;
             node = node ->next;
             delete temp;
             cout << "节点内存清除成功\n";
         }
     }
 }
posted @ 2021-04-11 12:18  呼_呼  阅读(857)  评论(0编辑  收藏  举报