我是MATLAB的新手。我必须编写一个函数来计算文本文件中某个字符的数量。请求2个输入参数:fname(文件名的char矢量)和字符(它在文件中计数的char)。
输出参数:找到的字符数。如果找不到文件或字符不是有效字符,则函数返回-1。
我写了一个函数,它正确地传递了4个测试中的两个。两个错误的是:
==> 1)使用所有可见字符进行测试
Explanation:变量charnum的值不正确。使用'#'进行测试时,您的解决方案返回-1,这是不正确的。 (0)
==> 2)没有存在的文件
对于数字2),没有提供解释。
这是我的代码:
function charnum = char_counter(fname, character)
A = fileread(fname);
char_1 = strfind(A, character);
charnum = numel(char_1);
if isfile(fname) == 0 %doesn't work...
charnum = -1;
elseif exist(fname) == 0
charnum = -1;
elseif charnum == 0
charnum = -1;
elseif ischar(character) == 0
charnum = -1;
fclose(fid);
end
谢谢大家的建议和意见。
我理解,对于1)我可能应该添加一条指令来考虑所有角色,但我找不到令人满意的方式。因为当我测试字符'#'时,它在我的MATLAB上正常工作:当我用可见字符'#'测试函数时答案是正确的。
2)我不明白为什么我的第4行无法正常工作。我已经检查了互联网上的各种选项,但到目前为止它还没有解决问题。
回答你的问题:
1)A = fileread(fname)
会在你到达if语句之前抛出一个错误,所以你必须重构你的代码才能考虑到这一点。
但是,您可以使用isequal
函数来比较if语句的两个内容。如果找不到文件,isfile
返回0,因此您可以将其与0进行比较。
if isequal(isfile(fname),0)
charnum = -1;
2)如果输入不是字符数组,则函数ischar
返回0。对于字符串数组,这将返回0,因此请100%确定您的输入是字符数组。使用char
执行此操作:
elseif isequal(ischar(char(character)),0)
charnum = -1;
以下是您的函数的外观:
function charnum = char_counter(fname, character)
if isequal(isfile(fname),0)
charnum = -1;
else
A = fileread(fname);
char_1 = strfind(A, character);
charnum = numel(char_1);
if isequal(exist(fname),0)
charnum = -1;
elseif isequal(charnum,0)
charnum = -1;
elseif isequal(ischar(char(character)),0)
charnum = -1;
end
fclose(fid);
end
end