문자

2014-10-11 1 views
-12

의 문자열에서 구두점을 제거하면이 요청 책 C++ Primer(수 3.2.3)에있는 운동입니다 :문자

Write a program that reads a string of characters including punctuation and writes what was read but with the punctuation removed.

내가 그것을 해결하기 위해 시도했지만 오류가있어 :

#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    string s; 
    cin >> "Enter a sentence :" >> s >> endl; 
    for (auto c : s) 
     if (ispunct(c)) 
      remove punct; 
     cout << s << endl; 


    } 
+2

... 정확히 무엇이 오류입니까? – Columbo

+0

모호성을 피하기 위해'if'와'for' 문 주위에 중괄호를 사용해야합니다. 또한,'punct '를 제거하는 것은 말이되지 않습니다. – 0x499602D2

+0

보시다시피 질문에 결과를 저장할 필요가 없습니다. 모든 문자를 하나씩 탐색합니다. 왜 구두점이 아닌 문자를 하나씩 쓰지 않는 것이 좋을까요? –

답변

5

remove_if()

#include <iostream> 
#include <algorithm> 
#include <string> 
using namespace std; 

int main() 
{ 
    string s; 

    getline(std::cin,s); 

    cout << s << endl; 
    s.erase (std::remove_if(s.begin(), s.end(), ispunct), s.end()); 
    cout << s << endl; 
} 
+0

이 아이디어가 마음에 들지만, 이것을 사용하려고하면 컴파일러 오류가 발생합니다. "오류 : 'remove_if'에 대한 호출과 일치하는 함수가 없습니다 ..." – Trenin

+0

@ Trenin, 사용중인 컴파일러는 무엇입니까? – CroCo

+1

g ++ gcc 버전 6.3.0 20170406 (우분투 6.3.0-12ubuntu2) – Trenin

2
에서보세요

첫 번째 문제는 잘못된 방법으로 cin을 사용하고 있다는 것입니다. cin은 표준 입력 용으로 사용되므로 문자열과 개행 문자를 인쇄 해 보는 것은 의미가 없습니다. 이 cout위한 작업입니다 :

cout << "Enter a sentence : "; 
cin >> s; 
cout << endl; 

다른 문제는 성명으로 remove punct 컴파일러에 아무 의미하지 않습니다. 구문 오류입니다. 당신이 구두점없이 문자열을 인쇄 할 때문에, 단지 ispunct() false를 반환하는 경우에만 인쇄 :

for (auto c : s) 
{ 
    if (!ispunct(c)) { 
     cout << c; 
    } 
} 

은 또한 모호함을 피하기 위해 괄호를 사용해야합니다.