How can I split a string and assign new values to the strings?

If if want to change the string
str='Hello'
Into a new string with the values
str='Hotel-Echo-Lima-Lima-Oscar'
How do I do that?

 Respuesta aceptada

Guillaume
Guillaume el 9 de En. de 2017
Editada: Guillaume el 9 de En. de 2017
This is even simpler, using the newly introduced replace (R2016b):
natoLookup = {'h','Hotel-';
'e','Echo-';
'l','Lima-';
'o','Oscar-';
};
replace(lower('Hello'), natoLookup(:, 1), natoLookup(:, 2))

Más respuestas (2)

the cyclist
the cyclist el 9 de En. de 2017
Editada: the cyclist el 9 de En. de 2017
Here is one way:
natoLookup = {'h','Hotel-';
'e','Echo-';
'l','Lima-';
'o','Oscar-';
};
str = 'Hello';
newstr = '';
for nc = 1:numel(str)
[tf,loc] = ismember(lower(str(nc)),natoLookup(:,1));
newstr = [newstr,natoLookup{loc,2}];
end
% Trim the excess hyphen
newstr(end) = [];

3 comentarios

JVM
JVM el 9 de En. de 2017
Editada: JVM el 9 de En. de 2017
Does this work in generel? Or is it just in this case with 'Hello'?
If you modify natoLookup to include every character you want to replace (the whole alphabet plus symbols) and change str to be whatever word you want to operate on, then it will be completely general.
As @ImageAnalyst states, it will be general after you generalize the lookup table.
One other quick comment: If you are planning to use this with very long text, it would be best to modify this code to preallocate memory for newstr. The current algorithm will manage memory poorly.

Iniciar sesión para comentar.

Stephen23
Stephen23 el 9 de En. de 2017
Editada: Stephen23 el 9 de En. de 2017
Using indexing means no loops and a very memory-efficient method:
>> str = 'Hello World!';
>> tmp = num2cell(str);
>> idx = isletter(str);
>> C = {'Alpha', 'Bravo', 'Charlie', 'Delta', 'Echo', 'Foxtrot', 'Golf', 'Hotel', 'India', 'Juliet', 'Kilo', 'Lima', 'Mike', 'November', 'Oscar', 'Papa', 'Quebec', 'Romeo', 'Sierra', 'Tango', 'Uniform', 'Victor', 'Whiskey', 'Xray', 'Yankee', 'Zulu'};
>> tmp(idx) = strcat(C(1+upper(str(idx))-'A'),'-');
>> [tmp{:}]
ans = Hotel-Echo-Lima-Lima-Oscar- Whiskey-Oscar-Romeo-Lima-Delta-!
Or with a bit of attention to the hyphens:
>> D = {'','-'};
>> idy = idx & [idx(2:end),false];
>> tmp(idx) = strcat(C(1+upper(str(idx))-'A'),D(1+idy(idx)));
>> [tmp{:}]
ans = Hotel-Echo-Lima-Lima-Oscar Whiskey-Oscar-Romeo-Lima-Delta!

Categorías

Más información sobre Characters and Strings en Centro de ayuda y File Exchange.

Preguntada:

JVM
el 9 de En. de 2017

Comentada:

el 9 de En. de 2017

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by