2014-12-14 4 views
5

저는 텍스트를 morsecode로 변환하는 스크립트를 만들었습니다. 이제 단어 사이에 슬래시가 포함되도록 수정하고 싶습니다. 따라서 morsecode 단어 사이에 공백 문자를 넣을 수 있습니다. 나는 메인 루프 전에 내 루프가 잘못 알고 난 그냥 정말 도움을 필요로하기 전에 언급 한 바와 같이 나는 그것이 어떻게 수정하려는 주셔서 감사합니다! :문자열, matlab 사이에 여분의 공백을 제거하는 방법?

... 

Word=input('Please enter a word:','s'); 
    ... 
      Code=MC_1; 
    ... 

    case ' ' 
     Code='/' 
    otherwise 
     Valid=0; 
end 
if Valid 
     fprintf('%s ',Code); 
else 
     disp('Input has invalid characters!') 
     break 
end 
+0

[이 예 번역기 (http://morsecode.scphillips.com/jtranslator.html)는 형식을 보인다 당신이 원하는 것과 같은 방법으로 모스. – horchler

답변

6

내가 여러를 제거하는 루프를 작성하려는 알고 단어 사이에 공백이 있지만 특정 문제에서 공백을 제거하는 가장 좋은 방법은 regexprep과 같이 regular expressions을 사용하는 것입니다. 정규식은 큰 문자열 내의 특정 패턴/하위 문자열을 검색하는 데 사용됩니다. 이 경우, 우리가 찾고자하는 것은 둘 이상의 공백으로 구성된 하위 문자열입니다. regexprep은 패턴과 일치하는 하위 문자열을 찾아 다른 문자열로 바꿉니다. 우리의 경우 적어도 하나 이상의 공백 문자를 포함하는 문자열 내의 하위 문자열을 검색하고 단일 공백 ​​문자로 바꿉니다. 또한 문자열의 앞뒤 공백을 모두 strtrim을 사용하여 다듬 었음을 알았습니다. 이제, 당신이해야 할 모든과 같이 호출 regexprep입니다 :

Word = regexprep(Word, '\s+', ' '); 

\s+적어도 하나의 공백 문자을 찾기위한 정규 표현식입니다. 그런 다음 이것을 하나의 공백으로 대체합니다. 따라서, 우리는이 문자열이 Word에 저장했다 치죠 :

Word = ' hello how are you '; 

가 선행 및 후행 공백을, 우리는 이렇게 이야기하는 방식에 regexprep를 호출 트림을하는 제공 : 당신이 할 수

Word = strtrim(Word); 
Word = regexprep(Word, '\s+', ' ') 

Word = 

hello how are you 

앞뒤 공백은 strtrim으로 제거되었고 정규 표현식은 나머지 공백을 처리합니다. 당신은 루프를 사용하여 죽은 세트가있는 경우


그러나, 당신이 할 수있는 일은 우리가 공백을 감지 할 때 true로 설정되어 logical 변수를 사용하고, 우리는이 변수를 사용하고 흰색 기타 건너 뛰기 공백 문자 까지 공백이 아닌 문자가 나타납니다. 그런 다음 공간을 배치 한 다음 /, 그 다음 공백을 입력 한 다음 계속합니다.

Word = strtrim(Word); %// Remove leading and trailing whitespace 
space_hit = false; %// Initialize space encountered flag 
Word_noSpace = []; %// Will store our new string 
for index=1:length(Word) %// For each character in our word 
    if Word(index) == ' ' %// If we hit a space 
     if space_hit %// Check to see if we have already hit a space 
      continue; %// Continue if we have 
     else 
      Word_noSpace = [Word_noSpace ' ']; %// If not, add a space, then set the flag 
      space_hit = true; 
     end 
    else 
     space_hit = false; %// When we finally hit a non-space, set back to false 
     Word_noSpace = [Word_noSpace Word(index)]; %// Keep appending characters 
    end 
end 
Word = Word_noSpace; %// Replace to make compatible with the rest of your code 

for Character = Word %// Your code begins here 
    ... 
    ... 

무엇 위의 코드가하는 일은 우리가 별도의 공간과 우리의 단어를 포함 Word_noSpace라는 빈 문자열을 가지고 있고, 그 공간은 하나의 공백으로 대체한다는 것입니다 : 즉,이 같은 뭔가. 루프는 각 문자를 통과하고 공간을 만나면 이미 공간이 있는지 확인합니다. 우리가 가지고 있다면, 그냥 계속 반복하십시오. 아직 없으면 공백을 연결하십시오. 마침내 공백이 아닌 문자가 나오면 공백이 아닌 문자를이 새 문자열에 추가하기 만하면됩니다. 결과는 여분의 공백이없는 문자열이되고 그 공백은 단일 공백으로 대체됩니다.

당신이 선두를 손질 한 후 위의 코드를 실행하므로 후행 공백을 제공합니다

Word = 

hello how are you 
관련 문제