2015-01-02 2 views
0

죄송합니다. 이것은 기본적인 기능이지만 C++의 전체 영역은 여전히 ​​새로운 것입니다. 나는 "hello"라는 단어의 어떤 형태라도 허용하려고 노력하고있다. 사용자가 단어를 어떻게 입력했는지 (대문자, 소문자 또는 혼합)에 관계없이 프로그램에서 인사말을 허용하도록하고 싶습니다. 자유롭게 비판해라, 나는 단지 배우려고 노력하고있다. :)대소 문자를 구분하지 않음

int instructions() 
{ 

    string intro; 

     do 
     { 
      cout << "Greet me with 'hello' to continue: " << intro; 
      cin >> intro; 

     } while (intro != "hello"); 

     cout << "Welcome! What shall I call you? "; 
     cin >> name; 
     cout << "\nHello " << name << "! "; 

    return 0; 
} 
+1

확인이 밖으로 http://stackoverflow.com/questions/313970/how-to-convert-stdstring-to-lower-case 그냥 소문자하고 '안녕하세요'와 비교하는 입력을 변환 할 필요가 –

+3

@m_pro_m 일반적으로 대/소문자를 구분하지 않는 비교 알고리즘을 사용하는 것이 좋습니다. 소문자로의 변환에는 고유 한 문제 세트가 있습니다. (그러나, 내가 아는 C++ 표준 라이브러리에는 그러한 알고리즘이 없다. 부스트가있다.) – dyp

+1

@Rinzler 이것은 언어와 관련이 없지만 * libraries *와는 관련이있다. 예를 들어, [this] (http://stackoverflow.com/a/315463/420683)는 C++에서 boost 라이브러리를 사용하는 매우 간단한 솔루션입니다. – dyp

답변

1

당신은 몇 가지 기능을 사용할 수 있지만 tolower 마음에 온 최초의 일이다. 이 솔루션을 사용하려면 람다 때문에 C++ 11 표준을 사용해야합니다. 네가 할 수 없다면 나에게 알려줘. 그러면 대안을 줄거야.

#include <cctype> 
#include <algorithm> 
#include <iostream> 

int instructions() 
{ 
    string intro; 

    do { 

     cout << "Greet me with 'hello' to continue: "; 
     cin >> intro; 

     for_each(intro.begin(), intro.end(), [](char &a) { 
      a = tolower((unsigned char)a); 
     }); 

    } while (intro != "hello"); 

    return 0; 
} 
+0

나는 그것을 몰랐다. 캐스트가 적합한 솔루션이 될까요? –

+0

예, 캐스트가 잘 어울립니다. 하지만 여전히 실제 컴파일러로 코드를 테스트해야합니다. '입력 '에 오타가 있습니다. 그리고'cin >> intro'가 성공했는지 확인해야합니다. 그렇지 않으면 무한 루프가 발생합니다. 그리고'std :: string'을 사용하는 것을 잊지 마십시오. –

+0

다른 해결책은'std :: transform'을 사용하는 것입니다. –

관련 문제