2013-09-29 3 views
0

저는 C++에서 시작하고 간단한 작업이 있습니다. 제목에서 말했듯이, x 번 (x는 문자열의 길이)의 문자열에서 첫 번째와 마지막 문자를 삭제하려고합니다. 문자열이 "예" 경우 예를 들어, 결과는 다음과 같습니다
example
xampl
amp
m
amp
xampl
example
C++에서 문자 삭제 문자열

지금까지, 나는 이렇게 생각하고 있어요 : 그런

#include <iostream> 
#include <string> 

string sir = "Example"; 
int len, i; 
len = sir.length(); 

for(i=1; i<=len; i++) 
{ 
    sir.erase(sir.begin(), sir.end()); 
    cout<<sir;  
} 

또는 뭔가를 ... 누군가 나를 도울 수 있습니까?

+0

['substr'] (http://www.cplusplus.com/reference/) 사용 방법은 어떻습니까? 문자열을/문자열/substr /) – jozxyqk

+1

당신이 요소를 삭제하는 방법에 대해 묻고 있지만, 귀하의 예제 출력에서 ​​문자열은 신비하게 자체를 재구성하기 시작합니다. 문제의 일부를 빠뜨린 적이 있습니까? – juanchopanza

답변

0

문제는

  • 당신이
    당신이 std::string::iterator

  • 하지만를 사용할 필요가 같은 int i 등의 통합 지수 std::string::erase를 사용할 수 있다는 것입니다 당신은 현재의 논리, std::string::iterator를 사용하는 경우에도 erase이 호출 된 후에 반복기를 증가 시키려고합니다. (반복자가 유효하지 않습니다.)
    가능한 해결책 : erase 이후에 반복자에 sir.begin()을 할당하십시오.

    std::string sir = "Example"; 
    for(string::iterator i = sir.begin(); i != sir.end(); i = sir.begin()) 
    { 
        sir.erase(i); 
        std::cout << sir << std::endl; 
    } 
    

    출력 : 여기에

는 모습 수있는 방법입니다

xample 
ample 
mple 
ple 
le 
e 

은 그냥 std::string에서 문자를 삭제 한 후, 이러한 문자가 손실되어 있습니다. 그것들을 "복원"할 수는 없습니다. 나머지 절반은 좀 더 정교한 방법으로 접근해야하지만, 나는 그것을 여러분에게 남겨 둘 것입니다 :

+0

고마워요. 이것은 매우 유용했습니다! –

1

첫 번째와 마지막 문자를 모두 삭제하려고합니다. 그러나이 예에서는 각 단계를 추가했습니다. 실제로 원하는 것을 분명히하지는 않습니다. 문자를 삭제하거나 추가하려면 문자열을 변경하지 않고 유지하는 것이 좋습니다. 따라서 substr을 사용해야합니다. 그것을 확인하십시오 here.