문자열 입력 cin

  • limited10
    limited10

    안녕하세요?
    문자열 입력을 잘 모르겠습니다.
    Automated Judge Script 문제를 풀고 있습니다.
    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=31&page=show_problem&problem=1129

    [입력]
    2
    The answer is: 10
    The answer is: 5
    3
    The answer is: 10
    The answer is: 5
    ...

    문자열을 string class에 담고 싶습니다.

    int n;
    string submit[100], answer[100];
    
    cin >> n;
    for ( int i=0; i<n; i++ ) 
      getline(cin, submit[i]);
    
    cin >> m;
    for ( int i=0; i<n; i++ ) 
      getline(cin, answer[i]);
    

    이런식으로 짰더니 m값이 입력이 안됩니다.
    또 istringstream을 쓰자고 하니,

    string line;
    
    getline(cin, line);
    istringstream iss(line);  //iss
    iss >> n;
    
    for ( int i=0; i<n; i++ )
      getline(cin, submit[i]);
    
    getline(cin, line);
    istringstream iss2(line);  //iss2
    iss2 >> m;
    

    //iss, iss2 이렇게 다른 이름을 쓰니까 되긴 되덥디다.

    ICPC할 때 문자열을 보통 어떻게 처리하나요?
    꼭 Cpp 스타일을 고집하고 싶지는 않으나 std::string 을 포기하고 싶지도 않습니다.

    좋은 조언 부탁합니다! ^^


    12년 전
2개의 댓글이 있습니다.
  • Being
    Being

    첫 번째 코드의 경우는 줄바꿈 문자 직전에서 토크나이징되어서 그 직후 getline의 호출이 의도대로 동작하지 않아서 문제가 발생합니다. 해결책으로는,

    1. 더미로 getline을 한 번 쓰거나,
    2. 아래 코드와 같이 모든 입력을 getline을 기준으로 하거나,
    3. scanf 등의 경우 format string에 \n을 포함시키는 방법이 일반적입니다.

    12년 전 link
  • limited10
    limited10

    Being씨 감사합니다. 꽤 고생했는데 덕분에 갈피를 잡았습니다. ^^


    12년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.