2014-12-19 2 views
0

일부 문자열에서 "시간"을 제거해야합니다 (마지막 부분 문자열로 존재하는 경우). 나는 이런 식으로 뭔가를 시도마지막 부분 문자열이 값인지 확인하고 제거하려면 어떻게해야합니까?

"AmpliTime"    => "Ampli" 
    "IsoTimeTime"    => "IsoTime" 
    "SometypeTimeAndThenTime" => "SometypeTimeAndThen" 
    "SometypeTimeAndThenTimeAbc" => "SometypeTimeAndThenTimeAbc" 

하지만 단어의 시간이 끝 외에 다른 곳에서 나타나는 경우는 문제가 실행 :이 솔루션은 이러한 경우에 작동 할 필요가있다.

long start = s.find("Time"); 
if (start > 0) 
{ 
    printf("%d\n", start); 
    s.erase(start, 5); 
} 
printf("%d\n", start); 
+0

(puesdocode) 벡터 str.append (s.size() - 5, s.size())와 같은 찾기 기능을 사용하는 대신 마지막 5 개의 요소를 구분하지 않고 확인하십시오. –

답변

3

rfind 문자열 Time 끝이 문자열을 검색 유지할하지 않는 경우 이후 잠재적으로 비효율적이다.

if (s.size() >= 4 && s.compare(s.size()-4, 4, "Time") == 0) { 
    s.resize(s.size() - 4); 
} 

보시다시피, 나는 코드 번호 4 네 번을 사용했습니다 :

compare은, 그러나, 관심있는 문자열의 정확히 부분에 보인다. 호색적인 스타일이지만 일을 끝내게됩니다. 고정 된 문자열을 사용하는 경우에는 길이가 짧기 때문에 길이를 변수에 넣는 것보다 명확하지만 YMMV로 결정했습니다.

+0

전체 문자열 끝을 더 많은 방법으로 묶으십시오 : http://stackoverflow.com/questions/874134/find-if-string-endswith-another-string-in-c하지만이 질문을하기 때문에이 속임수를 표시하지 않았습니다. 지우기 부분을 묻습니다. 테스트를 수행하는 방법에 따라 지우는 데 중요한 정보가있을 수 있습니다 (모든 경우에 올바른 경우 '시작'이 문제에 대한 질문자의 시도입니다!). 또한이 질문에서'string ("Time")'을 생성하는 오버 헤드를 피하기를 원할 수도 있습니다. –

관련 문제