2014-06-18 6 views
-4

나는 이와 비슷한 것을 가지고있다. 문제는 문자열 만 글자이어야한다는 것입니다. 어떻게해야합니까? 나는 몇 시간 동안이 자리에 앉아 있었고 아무런 해결책도 찾지 못했습니다. 나는이 주제 Accept only letters에서 답변을 사용하려했지만 내가 너무 바보 야 아직도 당신이 유효성 검사 코드를 추가 할 필요가 :(C++ 문자열 만의 문자

#include <string> 
#include <vector> 
#include <iostream> 
#include <iterator> 
#include <algorithm> 


using namespace std; 

int main(void) 
{ 
vector <string> strings; 
string line; 

do 

{ 
cout << "enter string, 'stop' stops: "; 
cin >> line; 
strings.push_back(line); 
} 

while (line != "stop"); 

vector <string> :: iterator w; 
cout << "Before sorting \n"; 
for (w=strings.begin(); w!=strings.end(); w++) 
cout << *w << endl; 

sort (strings.begin(),strings.end()); 
cout << "After sorting \n"; 
for (w=strings.begin(); w!=strings.end(); w++) 

cout << *w << endl; 

} 
+0

while 루프에서 당신은 반복 할 필요가 문자열 및 문자가 문자가 아닌 경우 문자열의 벡터로 다시 밀어 넣지 마십시오. 문자가 영문자인지 확인하려면'std :: isalpha'를 사용할 수 있습니다. http://www.cplusplus.com/reference/cctype/isalpha/ – 101010

+0

루프가'while ((std :: cin >> 줄) && (줄! = "중지")) {strings.push_back (줄);}'. 그렇게하면 추가 요소를 얻지 못하고 값을 사용하기 전에 읽기 성공을 알 수 있습니다. 문자열을 문자로만 검사하거나 조건을'readString' 함수로 결합하는 또 다른 검사를 추가하는 것도 정말 쉽습니다. – ghostofstandardspast

+0

@ 40two, 직접 반복하지 말고'std :: all_of'를 사용합니다. – ghostofstandardspast

답변

1

작동 할 수없는 것 같아요. 간단한 경우를 들어, 당신이 할 수있는 뭔가 같은 :

if (std::find_if(line.begin(), 
        line.end(), 
        [](unsigned char ch) { return !isalpha(ch); } 
     ) != line.end()) { 
    // not all letters 
} 

(이 학교 프로젝트를위한 정말에만 적합하고, 일반적인 네트워크 인코딩하지 일, UTF-8 것입니다.)

+0

C++ 전에 사용 가능한'std :: find_if' 외에도'std :: find_if'를'std :: all_of' (또는 네가 부정을 시험한다면'std :: any_of')를 선호하는 이유가 있습니까? 11? 나는이 두 가지가 여기서 시험되고있는 것에 대해 약간 더 명확하다는 것을 알게됩니다. – ghostofstandardspast

+0

@ghostofstandardspast'std :: find_if'는 C++ 11을 필요로하지 않는다. C++ 11이 확실하다면'std :: any_of'가 아마도 더 나은 선택 일 것입니다. –