跳转至内容
  • 社区首页
  • 版块
  • 最新
  • 标签
  • 热门
折叠

GitHub中文论坛

  1. 主页
  2. 版块
  3. 技术交流
  4. c++输入时为什么会有重复读取的情况,或者说不读取下一行的情况

c++输入时为什么会有重复读取的情况,或者说不读取下一行的情况

已定时 已固定 已锁定 已移动 技术交流
1 帖子 1 发布者 11.4k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • JvRuoDiuJ 离线
    JvRuoDiuJ 离线
    JvRuoDiu
    写于 最后由 编辑
    #1
    • 这是第二次读取,temp_i变量又读到4 b的字符4
      1.PNG

    • 输出又为-1
      2.PNG

    • 这是第三次读取,还是读取4 b这一行。
      3.PNG

    • 就。。。。很迷???

    • 题目连接,测试点是题目的第二个测试点

    • 输入为
      6
      aaaaaaaaaaaaaaaaaaaaaaa
      4 aaaaaaaa
      1 aaaaa
      4 b
      2 2 3
      3 0 fafafafa
      4 fafa

    • 输出为
      0
      aaaaaaaaaaaaaaaaaaaaaaaaaaaa
      -1
      aaa
      fafafafaaaa
      0

    • 下面是代码,注意如果再洛谷测试,需要把\n改为\r,可能他们直接将window的文件复制过去了吧

    #include<iostream>
    #include<cstring>
    using namespace std;
    const int STRLEN_MAX=1e6;
    char temp_buf[STRLEN_MAX];
    int temp_buf_count;
    char buf[STRLEN_MAX];
    int buf_count;
    int main()
    {
        int n;
        char temp_i;
        char temp_c;
        buf_count=0;
        cin>>n;
        cin>>buf[0];
        cin.get(buf+1,STRLEN_MAX,'\n');
        buf_count=strlen(buf);
        while(n--)
        {
            cin>>temp_i;
            switch(temp_i-'0')
            {
                case 1:
                cin>>buf[buf_count++];
                cin.get(buf+buf_count,STRLEN_MAX,'\n');
                buf_count=strlen(buf);
                cout<<buf<<endl;
                break;
    
                case 2:
                int index,num;
                buf_count=0;
                cin>>index>>num;
                for(int i=index;i<index+num;i++)
                    buf[buf_count++]=buf[i];
                buf[buf_count]='\0';
                cout<<buf<<endl;
                break;
    
                case 3:
                int temp_i_0;
                cin>>temp_i_0;
                cin>>temp_buf[0];
                cin.get(temp_buf+1,STRLEN_MAX,'\n');
                temp_buf_count=strlen(temp_buf);
                for(int i=0;i<temp_buf_count;i++)
                {
                    for(int j=buf_count;j>temp_i_0+i;j--)
                    {
                        buf[j]=buf[j-1];
                    }
                    buf_count++;
                    buf[temp_i_0+i]=temp_buf[i];
                }
                buf[buf_count]='\0';
                cout<<buf<<endl;
                break;
    
                case 4:
                cin>>temp_buf[0];
                cin.get(temp_buf+1,STRLEN_MAX,'\n');
                temp_buf_count=strlen(temp_buf);
                char* temp_p;
                temp_p=strstr(buf,temp_buf);
                if(temp_p!=NULL)
                    cout<<temp_p-buf<<endl;
                else
                    cout<<-1<<endl;
                break;
            }
        }
        return 0;
    }
    
    1 条回复 最后回复
    0
    回复
    • 在新帖中回复
    登录后回复
    • 从旧到新
    • 从新到旧
    • 最多赞同


    • 登录

    • 第一个帖子
      最后一个帖子
    0
    • 社区首页
    • 版块
    • 最新
    • 标签
    • 热门