2012-11-15 4 views
-2

프로그램을 만들려고하는데, 이미 끝 냈지만 더 필요한 것이 있습니다. 따라서, 사용자는 내가 처음 * 내가 뭘 잘못 입력C++ 문자열 (입력)에서 문자를 지우는 방법

getline(cin,str); 
    int k=str.length(); 
    for(int i=0; i<=k; i++) 
     if(str[i]=='*') 
      string::iterator it; 
      it=str.begin()+i; 
      str.erase(it); 
      break; 
    cout<<str<<endl; 

cout을 지울 * 문자열이 포함 된 경우 입력을 제공하도록 요청?

+1

는 경우 (STR [I]를 == '*')보십시오. 또한 명령문이 참인 경우에만 실행하려는 항목의 끝까지 중괄호를 추가하십시오. – jt234

+0

'*'을 찾기 위해 ['str.find()'] (http://en.cppreference.com/w/cpp/string/basic_string/find)를 사용하고'str.erase()'버전이 있습니다. iterator 계산을 피하는 인덱스와 길이를 받아 들인다. – hmjd

+0

또한 각 문자를 루핑하는 대신 find 메서드를 사용하는 것이 어떻습니까? 그것은 더 간단해야합니다. – RonaldBarzell

답변

4

매우 조심해야합니다. 표를 사용하지 않고 범위를 제어하려면 대괄호 {}을 사용해야합니다. if에서 =는 대입이 아닌 검사입니다 사용 또한

는, 당신은 아직 당신이 x을 사용하여 삭제 i를 사용하여 반복 ==

를 사용할 필요가?

+0

을 사용할 수 없습니다. x – xlapa

+0

은 대괄호로 코드를 범위 지정하고'if (str [i] = '*')'를'if (str [i] ==) '*')'그리고 그것은 범위에 의해 – emartel

+0

을 작동해야한다. 나는 당신이 그것의 끝 부분에 당신의 if와'}의 내용 앞에 선행'{'을 가져야한다는 것을 의미한다. – emartel

2

* 최초로 출현을 제거 std::find을 사용하여 단순화 할 수 :

str.erase(std::find(str.begin(), str.end(), '*')); 
관련 문제