Pig Latin Converter Function
    2 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Scott
 el 24 de Nov. de 2016
  
    
    
    
    
    Comentada: Image Analyst
      
      
 el 25 de Nov. de 2016
            Hello all,
I am trying to write a function which takes a string as input and converts it to Pig Latin string. For example, 'pig latin in matlab' would become 'igpay atinlay inay atlabmay'. So everything before the first vowel is shifted to the end of the word and following by 'ay'.
I know that I can use find to find the first vowel in each word. But then how do I move the characters to the end of each word and append 'ay' to it?
Here is what I have so far:
function [ new_string ] = pig_latin( string )
each_word = [];
temp = '';
ay = 'ay';
words = strsplit(string,' ');
num_words = numel(words);
for j=1:num_words
    temp = words{j};
    vowel = temp(find(ismember(temp,'aeiou'),1,'first'))
    vowel_loc = find(vowel,1,'first');
end
0 comentarios
Respuesta aceptada
  KSSV
      
      
 el 24 de Nov. de 2016
        clc; clear all ;
str = 'pig latin in matlab' ; 
C = strsplit(str) ;  % split the string 
%%chnage accordinhly 
s0 = 'ay' ; % which has to be joined 
l = cellfun(@(c)[c(2:end) c(1)],C,'uni',false) ;
m = cellfun(@(c)[c s0],l,'uni',false) ;
iwant = strjoin(m)
6 comentarios
  Image Analyst
      
      
 el 25 de Nov. de 2016
				Is this solved yet? You accepted this answer but seem to indicate it's not right. What about my answer below? Is that right?
  KSSV
      
      
 el 25 de Nov. de 2016
				vowels = {'a' 'e' 'i' 'o' 'u'} ;
str = 'pig latin in matlab' ; 
C = strsplit(str) ;  % split the string 
l = cellfun(@(c) c(1),C,'uni',false) ;
% get vowels pos
idx = ismember(l,vowels) ;
C1 = C(~idx) ;
%%chnage accordinhly 
s0 = 'ay' ; % which has to be joined 
l1 = cellfun(@(c)[c(2:end) c(1)],C1,'uni',false) ;
m1 = cellfun(@(c)[c s0],l1,'uni',false) ;
%%work on vowel
C2 = C(idx) ;
m2 = cellfun(@(c)[c s0],C2,'uni',false) ;
%%Replace strings back
m = cell(size(C)) ;%
m(~idx) = m1 ;
m(idx) = m2 ;
iwant = strjoin(m)
Más respuestas (1)
  Image Analyst
      
      
 el 25 de Nov. de 2016
        How about this:
To call:
new_string = pig_latin('pig latin in matlab other')
Function declaration
function [new_string] = pig_latin( string )
new_string = '';
ay = 'ay';
words = strsplit(string,' ');
numWords = length(words);
for k = 1 : numWords
    thisWord = words{k};
    firstVowel = thisWord(find(ismember(thisWord,'aeiou'),1,'first'));
    vowelLocation = strfind(thisWord, firstVowel);
  if vowelLocation >= 2
    % Start the new word at the vowel location.
    newWord{k} = [thisWord(vowelLocation:end), thisWord(1:vowelLocation-1), ay, ' '];
  else
    % If word starts with a vowel, just add 'ay'.
    newWord{k} = [thisWord, ay, ' '];
  end
end
% celldisp(newWord);
% String cells together to form the output character array.
new_string = [newWord{:}];
Shows in command window:
new_string =
igpay atinlay inay atlabmay otheray
2 comentarios
  Image Analyst
      
      
 el 25 de Nov. de 2016
				You're welcome. I tried to keep it somewhat simple and straightforward, and on your level and similar to your existing code. Maybe you could at least "Vote" for my answer.
Ver también
Categorías
				Más información sobre Characters and Strings en Help Center y File Exchange.
			
	Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!