编写函数分隔符:
输入:inString——随机字符串标量与数字混合&字母
任务:
- 分离数字&信件
- 计算数字之和
- 计数字母数(计数的空格(
输出:
- 数字 ,字符串中顺序相同的所有数字的字符串标量
- 字母 ,inString中具有相同顺序的所有字母的字符串标量,并且不删除空格
- 数字之和 ,字符串中中所有数字之和的双精度标量
- 字母数 ,双精度标量,用于计数字符串中中的所有字母,计数空白
预期结果:
-
inString:"工程师;
-
数字:";121314355315465547548645865956";
-
字母:";工程问题解决";
-
编号总和:131
-
信件数量:27
这是我的代码:
function [numbers, letters, sumofNumbers, numberofLetters]=Separator(inString)
%Insert your code here
indexNum = regexp(char(inString), '[0-9]')
numbers = []
for i = 1:numel(indexNum)
numbers = [numbers , inString{1}(indexNum(i))]
end
% numbers
numbers = string(numbers)
% sumofNumbers
sumofNumbers = 0
for i = 1:numel(indexNum)
sumofNumbers = sumofNumbers + str2num(numbers{1}(i))
end
words = split(inString)
letters = []
count = 0
for i = 1:numel(words)
indexLett = regexp(char(words(i)), '[a-z]')
count = count + numel(indexLett)
for j = 1:numel(indexLett)
letters = [letters, words{i}(indexLett(j))]
end
letters = strcat(string(letters), " ")
letters = char(letters)
end
% letters
letters = strip(string(letters))
comb = split(letters)
letters = join(comb)
% number of Literal Letters
numofTrueLetters = count
% numberofLetters
numberofLetters = 0
numberofLetters = strlength(letters)
end
代码返回完全符合预期:
numbers =
"12131435531546547548645865956"
letters =
"engineering problem solving"
sumofNumbers =
131
numberofLetters =
27
然而,MATLAB分级器给出了这样的答案:"变量字母的值不正确">我很困惑。
如果有人能指出错误或错误,我将不胜感激,谢谢!
好吧,我明白了!我修改了这行;[a-z]";现在是";[A-Za-z]";其检查所有大小写的大小写不敏感。
indexLett = regexp(char(words(i)), '[A-Za-z]')
通过这种方式,indexLett将记录具有字母的字符串中的所有索引,而不区分大小写,
所以对于更多像这样的输入
"Apple is good for health"
或
"A42pp3113le31 is 31g11oo456d fo442r h105ea422l44t2h"
可以算作字符串中的大写单词。