How can I split a string and assign new values to the strings?
Ältere Kommentare anzeigen
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?
Akzeptierte Antwort
Weitere Antworten (2)
the cyclist
am 9 Jan. 2017
Bearbeitet: the cyclist
am 9 Jan. 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 Kommentare
Image Analyst
am 9 Jan. 2017
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.
the cyclist
am 9 Jan. 2017
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.
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!
Kategorien
Mehr zu Characters and Strings finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!