작성
·
99
0
7번을 강의해주신 대로도 풀어보고 다른 형식으로도 풀어보고 싶어서 다음과 같은 코드를 짜봤는데, 대문자에서 소문자로 변환은 잘 이루어지지만 중간에 포함된 띄어쓰기가 나타나면 거기서 멈춘 상태로 출력이 됩니다. 이유, 그리고 어떻게 수정해야 할 지가 궁금합니다.
예시) 입력: BeA UT I ful, 출력: bea
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
int main(){
ios::sync_with_stdio (false);
cin.tie (NULL);
cout.tie (NULL);
string str;
cin >> str;
vector<char> answer;
for(int i=0; i<str.size(); i++){
if(str[i]!=' '){
if(str[i]>=65 && str[i]<=90){
answer.push_back(str[i]+32);
}
else{
answer.push_back(str[i]);
}
}
}
for(int i=0; i<answer.size(); i++){
cout << answer[i];
}
}
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
오류의 원인을 확인했습니다. cin >> str;
를 사용하면 공백 전까지만 문자열을 입력받기 때문에 “BeA UT I ful”을 입력하면 “BeA”만 str
에 저장되고 나머지는 버려집니다. 따라서 문자열에 공백이 포함될 경우 getline 함수를 사용하여 전체 라인을 입력받아야 합니다.
아래 코드에서 수정할 부분을 안내해 드리겠습니다.
// ...
string str;
getline(cin, str); // 전체 라인을 입력받기 위해 getline 함수 사용
// ...
cin >> str;
대신에 위와 같이 getline(cin, str);
로 바꾸면 공백을 포함한 전체 문자열을 입력받아 처리할 수 있습니다.
이렇게 입력받으면 예시 “BeA UT I ful”에 대해서도 정상적으로 “bea ut i ful”이라는 결과를 얻을 수 있을 것입니다.
질문하신 내용에 대한 답이 되었기를 바랍니다.