使用 getline() 的字符串输入问题

Problems with string input using getline()

本文关键字:字符串 输入 问题 getline 使用      更新时间:2023-10-16

这是我对代码强制 http://codeforces.com/problemset/problem/499/B 中问题的解决方案。我在输入字符串时遇到问题。它在我给它输入 str 并输出一些奇怪的字符之前在第 10 行(参见代码)之后终止。

Input: 4 3
       codeforces codesecrof
       contest round
       letter message
Output:


#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
int main(){
    int N, M;
    string str;
    cin>>N>>M;
    string A[M], B[M];
    for(int i=0; i<M; i++)
    cin>>A[i]>>B[i];     // line 10
    getline(cin,str);
    char res[N+1];

    for(int i=0; i<M; i++){
        int j= str.find(A[i]);
        int k;
        int x=0;
        if(B[i].length() < A[i].length()){
            for(k=j; k<B[i].length(); k++){
                res[k]= B[i][x];
                x++;
            }
        }else{
            for(k=j; k<B[i].length(); k++){
                res[k]= B[i][x];
                x++;
            }
        }
        res[k]=' ';
    }
    for(int i=0; i<=N; i++ )
        cout<<res[i];
    cout<<endl;
    return 0;
}

输入流中留下一个换行符:

cin>>N>>M;

您需要一行代码来读取和丢弃该行的其余部分。添加一行;

cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');

在那行之后。

#include <limits>

能够使用std::numeric_limits.