2014-09-09 5 views
0

나는 대문자로 쓰여진 동일한 문자열로 입력에 주어진 문자열을 변경해야하는 약간의 훈련을 다룬다.대문자로 문자열 바꾸기 function

여기 내 시도가 있는데, 문자열의 첫 번째 단어 만 인쇄하는 이상한 이유가 있습니다. 공백 문자를 읽지 않습니다. 문제를 해결하는 방법은 무엇입니까?

#include <iostream> 
#include <string> 

using namespace std; 

void uppercase(string str) 
{ 
    locale loc; 
    for(size_t i=0; i<str.length(); ++i) 
    { 
     cout << toupper(str[i], loc); 
    } 
} 

int main(void) 
{ 
    string text; 
    cout << "Input text, please: " << endl; 
    cin >> text; 
    uppercase(text); 
    } 

나는이 excersice를 해결할 수있는 여러 가지 방법이있을 수 있지만 내 방법을 고수하고 싶습니다. 어떤 잠재적 인 실수라도?

+0

'동안 (CIN >> 텍스트) 대문자 (텍스트),'' – jfs

+0

CIN >> 텍스트,'제 공백에 처리를 정지한다. – Niall

답변

4

물론, std::getline을 사용하면 한 단어 대신 전체 줄을 가져올 수 있습니다. 대부분의 프로그램은 입력을 받아들이는 방식이기 때문에 거의 항상 항상 사용해야합니다.

1

std::cin에서의 공백은 공백으로 구분됩니다. 전체 문자열을 개행 문자로 바꾸려면 std::getline이 필요합니다.

std::getline(std::cin, text); 
0
void uppercase(string str) 
{ 
    locale loc; 
    for(size_t i=0; i<str.length(); ++i) 
    { 
      if(str[i] != " ") 
      { 
       cout << toupper(str[i], loc); 
      } 
    } 
} 
관련 문제