I need help fixing one problem with this functtion.
1 回表示 (過去 30 日間)
古いコメントを表示
I wrote this function 'removeLetter' to take any selected letter out of a given string and also displays the number of letters that were removed, for example, if a user inputs
[newstr, num]=removeLetter('water bottle', 't')
the output will be:
newstr= waer bole
num=3
the code does the function I need it to do, and works for lower and upper case letters. This is the script:
function [newstr, num] = removeLetter(str, letter)
A=double(str); %A represents the string as a number
B=double(letter); %B represents the letter as a number
numRemoved=0;
for i=2:length(A)
if double(str(i))==B || double(str(i))-32==B || double(str(i))+32==B %checks for capital and lower case letters depending on what the input letter and string was.
A(i-numRemoved)=[];
numRemoved=numRemoved+1;
num=numRemoved;
newstr=char(A);
end
end
I realize there are better ways to write this script using other built in function but I cannot use any functions we have not learned in class yet. We have learned a fair amount of functions but some individuals on here recommended some functions I cannot use yet, such as 'regexprep' and 'strfind.' This is why I am using the 'double' and 'char' functions, this is what we are working with in class so this is what I am expected to use. The only trouble I am having completing my script is the error I get when the letter entered is not in the string. For example I would need it to look like this:
[newstr, num]=removeLetter('pizza', 'r')
newstr= pizza
num=0
but instead of the desired output, it gives me an error saying "Output argument 'newstr' (and maybe others) not assigned during call to 'removeLetter'".
I tried using things like 'if str~=B (the variable for the letter) then num=0 and newstr=str' but that just made the number equal zero every time even if the string contained the letter. I just need to know how to fix it so it displays '0' instead of this error when the letter isn't in the string.
0 件のコメント
採用された回答
per isakson
2017 年 10 月 9 日
Try to put
if numRemoved == 0
num = 0;
newstr = str;
end
at the end of your function
5 件のコメント
その他の回答 (1 件)
Image Analyst
2017 年 10 月 9 日
編集済み: Image Analyst
2017 年 10 月 9 日
This is how I'd do it:
function [newstr, num] = removeLetter(str, letter)
indexes = str == letter;
num = sum(indexes);
newstr = strrep(str, letter, '');
You can also do
newstr = str;
newstr(indexes) = [];
instead of the strrep() line.
2 件のコメント
Image Analyst
2017 年 10 月 9 日
Kevin, that's not a function. It's a variable. You're allowed to call a variable "indexes". It's a lot better and more descriptive than x or a like people usually call variables. It's a logical index that say whether or not the letter is in each position of the string. Just take off the semicolons and see what it prints out.
My solution was much better than yours or per's solution. It's just ridiculous to convert your string to a double when strrep() is a built-in function to do what you want. If your professor also disallows strrep() for some weird reason, then simply use my last chunk of code to replace it.
参考
カテゴリ
Help Center および File Exchange で Characters and Strings についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!