senjie98 2018-08-05 03:36 采纳率: 100%
浏览 1410
已采纳

C++中编程时遇到的字符串数组、getline()用法问题

题目:

输入描述:

输入的第一行为N,即学生的个数(N<=1000)
接下来的N行包括N个学生的信息,信息格式如下:

4

01 李江 男 21

02 刘唐 男 23

03 张军 男 19

04 王娜 女 19

然后输入一个M(M<=10000),接下来会有M行,代表M次查询,每行输入一个学号,格式如下:

5

02

03

01

04

09

输出描述:

输出M行,每行包括一个对应于查询的学生的信息。
如果没有对应的学生信息,则输出“No Answer!”

02 刘唐 男 23

03 张军 男 19

01 李江 男 21

04 王娜 女 19

No Answer!

我的代码:

#include<iostream>
using namespace std;
int main()
{
    int M,N;
    string id[1000];
    while(cin>>N)
    {
        string id[N+1];//?????为何N要多一个??????
        for(int i=0;i<N+1;i++)
        {
            getline(cin,id[i]);
        }
        while(cin>>M)
        {
            string num;
            for(int i=0;i<M;i++)
            {
                cin>>num;
                for(int j=0;j<N+1;j++)
                {
                    if(id[j].find(num)==0)
                    {
                        cout<<id[j]<<endl;
                        break;
                    }
                    if(j==N)
                        cout<<"No Answer!"<<endl;
                }
            }
        }
    }
}

问题1:
代码中注释那儿用getline()每次读入一整行时,数组得设N+1个才能正确输出测试样例中最后一个人的信息(不然最后一个信息输出的格式不对)

问题2:
输入测试数据有100个人时,查找1000条信息时,出现下面这种情况,求解原因(详细):

图片说明

  • 写回答

2条回答

      报告相同问题?

      悬赏问题

      • ¥15 综合的类,这个类里面里面又有构造方法,重载方法,有继承,有重写,有接口
      • ¥15 电脑重置失败无法开机也进不了修复模式,如何解决?
      • ¥100 px4飞控如何设置平飞模式下飞机固定的仰角
      • ¥15 关于#python#的问题:不可以使用max ,min ,exit ,break 的情况下找出哪一年份出生率最高,以及哪一年份出生率最低
      • ¥15 WPF中使用DoDragDrop程序会崩,"FatalExecutionEngineError"
      • ¥15 C语言 堆排序 数据结构
      • ¥15 ue如何做自然的物体边缘磨损效果材质
      • ¥15 求解答,急,本人真的是没有办法了
      • ¥15 我是在windows环境下通过IIS部署django项目,但是是这样怎么处理呢
      • ¥30 51单片机测量脉冲周期/频率并加以计算、显示