2016-07-11 2 views
-1

모든 느낌표를 문자열의 점으로 바꾸라는 질문이 나옵니다. 함수를 생각해 냈지만 마지막 느낌표가 변경되지 않으므로 오류가 발생합니다. 그것은 마지막 감탄입니다.느낌표를 문자열의 점으로 바꾸기

입력은 다음과 같습니다

우리는 공간에서 우리의 탐구를 계속할 것입니다. 더 많은 셔틀 항공편과 더 많은 셔틀 승무원과 예, 더 많은 자원 봉사자, 더 많은 민간인, 더 많은 선생님이 우주에있을 것입니다. 아무것도 끝나지 않습니다. 우리의 희망과 우리의 여행은 계속됩니다!

내 기능은 다음과 같습니다

string ReplaceExclamation(string text) 
{ 
string newText = text; 
int i, len = text.size(); 

for(i=0; i<len; i++) 
{ 

if(text[i] == '!') 
newText[i] = '.'; 
} 
return newText; 
} 

사람이 그냥 마지막 느낌표 이후 그것을 하드 코어하는 방법을 알고 있나요. 감사

+4

전체 기능은 어떻게 생겼습니까? 'text' 또는'newText'를 돌려 주나요? 이 함수를 어떻게 부릅니까? [최소, 완전하며 검증 가능한 예] (http://stackoverflow.com/help/mcve)를 만들어 보여 주시겠습니까? –

+0

내 상자에 코드를 입력했지만 잘 작동합니다. 우주에서 우리의 탐구를 계속하겠습니다. 더 많은 셔틀 항공편과 더 많은 셔틀 승무원과 예, 더 많은 자원 봉사자, 더 많은 민간인, 더 많은 선생님이 우주에있을 것입니다. 아무것도 끝나지 않습니다. 우리의 희망과 우리의 여정은 계속됩니다. – walker

+1

[재생할 수 없습니다] (http://coliru.stacked-crooked.com/a/1bfe589f6a9d170f) –

답변

3

당신은 점으로 느낌표 문자를 대체 할 std::replace 알고리즘 기능을 사용할 수 있습니다

std::replace(s1.begin(), s1.end(), '!', '.'); 

당신이 <algorithm> 헤더를 포함해야합니다.

0

문자열 라이브러리의 길이 함수는 문자열 끝에 '\ 0'문자를 포함하지 않습니다. 따라서 for 루프에서 종료 조건으로 len + 1을 시도 할 수 있습니다.

string ReplaceExclamation(string text) 
{ 
string newText = text; 
int i, len = text.size(); 

for(i=0; i<len+1; i++) 
{ 

if(text[i] == '!') 
newText[i] = '.'; 
} 
return newText; 
} 

희망 하시겠습니까?

+0

왜 이것이 도움이 될까요?기껏해야 null 종결자를 검사하고 길이를 넘는 색인 생성에 대한 일관성없는 규칙의 추가 반복과 혼란을 추가하는 것입니다. 최악의 경우 C++의 dialect를 사용하고 있는데, 이것은 정의되지 않은 동작입니다. – chris