2014-11-21 9 views
0

나는동일한 단계에서 읽고 소문자로 사용할 수있는 방법은 무엇입니까?

string word; 
while(cin >> myWord) 
    //put myWord in array 

를 통해 사용자의 입력에서 읽고 있어요하지만 정렬을 위해 나는 "이"을 "이"동일하게합니다. 내 정렬 알고리즘에 대해 기본값 인 <과 string에 대한 값을 사용하고 있습니다! This! = this, 내 목적을 위해 == 필요하므로 즉시 읽는 동안 모든 것을 소문자로 만들고 싶습니다. from the tolower 나는 단어를 반복하고 그것을 소문자로 만들기 위해 for 루프를 만들어야 할 필요가 있음을 알 수있다. 그래서 나는 while 루프 안에서 단어를 배열에 넣기 전에 이것을 할 필요가있다. 그러나 나는 myWord에 이미 cin에서 단어를 넣으려면 할 수있는 트릭이 있는지 궁금하네요. 하나의 줄에 cin >> myWord.lower의 줄을 따라 이미 소문자로 만들거나 ("myWord"를 읽은 다음에 소문자로 만듭니다) 제가 무엇입니까? 이야기 해요 약

+0

의 중복 가능성 (http://stackoverflow.com/questions/313970/how-to-convert-stdstring-to-lower-case) – bialpio

+0

같은 단계에서 어떻게해야하는지 잘 모르겠지만 [tolower] (http://www.cprogramming.com/ fod/tolower.html)을 배열에 넣기 전에 소문자인지 확인하십시오. –

+0

대소 문자를 무시하고 문자열을 비교하는 사용자 정의'SortPredicate'를 통해'std :: sort'에서 정렬 순서를 바꿀 것입니다. – vsoftco

답변

0

그건 내가 std::string

#include <algorithm> 
#include <iostream> 
#include <locale> 
#include <string> 

struct SortNoCase // functor used to sort strings ignoring the case 
{ 
    bool operator()(const std::string& lhs, const std::string& rhs) const 
    { 
     std::string lhs_lower, rhs_lower; 
     std::transform(std::begin(lhs), std::end(lhs), 
      std::back_inserter(lhs_lower), ::tolower); 
     std::transform(std::begin(rhs), std::end(rhs), 
      std::back_inserter(rhs_lower), ::tolower); 
     return lhs_lower < rhs_lower; 
    } 
}; 


int main() 
{ 
    std::vector<std::string> vs{"Some", "strings", "THAT", "are", "UnSorted"}; 

    std::sort(std::begin(vs), std::end(vs), SortNoCase()); 

    for(auto&& elem: vs) 
     std::cout << elem << " "; 
    std::cout << std::endl; 
} 

PS에 대한 조건을 사용자 정의 정렬을 사용하여, 그것을 할 것입니다 방법 : 사용자 지정 문자 특성을 사용하여 같은 더 정교한 접근 방식이있다, 그러나 이것은 그것을 수행하고 그것의 이해하기 쉬운. 당신이 정말로 골동품을 경우, 여기 좀 걸릴 수 있습니다 : [? 소문자로 표준 : : 문자열을 변환하는 방법]

https://stackoverflow.com/a/5319855/3093378

0
std::for_each(myWord.begin(),myWord.end(),[] (char &c) {c=std::tolower(c);}); 
+0

그것이 OP가 필요로하는 것이라면, 완벽하게 작동합니다. 비록 그가 문자열의 배열을 대소 문자를 구분하지 않고 정렬하려고한다는 인상을 받았지만 말입니다. – vsoftco

+0

@vsoftco 조금 혼란 스러웠습니다. 그는 소문자로 즉각적인 변환을 원한다고 썼다. 그리고이 라이너는 매우 즉각적입니다. 그가 현금을 보존하고 정렬 순서 만 변경하려는 경우 그는 반드시 귀하의 costum comparator와 함께 가야합니다. – Oncaphillis

+0

우리는 추측 할 수 있습니다 :) – vsoftco