在MatLab中创建翻译器
我试图在Matlab中创建一个简单的程序,用户可以在其中输入字符串(如“a”、“B”、“AB”或“AB”),程序将输出与我的字母对应的单词在MatLab中创建翻译器,matlab,Matlab,我试图在Matlab中创建一个简单的程序,用户可以在其中输入字符串(如“a”、“B”、“AB”或“AB”),程序将输出与我的字母对应的单词 Input | Output A Hello B Hola AB HelloHola A B Hello Hola 这是我的代码: A='Hello'; B='Hola'; userText = input('What is your message: ', 's'); userText = upper(u
Input | Output
A Hello
B Hola
AB HelloHola
A B Hello Hola
这是我的代码:
A='Hello'; B='Hola';
userText = input('What is your message: ', 's');
userText = upper(userText);
for ind = 1:length(userText)
current = userText(ind);
X = ['The output is ', current];
disp(X);
end
目前我没有得到我想要的结果。相反,我得到的是:
Input | Output
A The output is A
B The output is B
我不完全清楚为什么X=['输出为',当前]代码>计算结果为输出为而不是输出为Hello
编辑:
这个程序如何处理数字。。。例如1=“再见”
查看命令eval
。当前,您正在显示包含所需字符串的变量的名称<代码>评估将帮助您实际访问和打印它。您需要做什么:
X = ['The output is ', eval(current)];
这里是文档:发生了什么:
%// intput text
userText = input('What is your message: ', 's');
%// ...and some lines later
X = ['The output is ', userText];
您从不将键入的内容映射到变量A
和B
所包含的内容
它们被称为A
和B
与您键入的内容无关。您可以调用它们C
和blargh
,但仍然可以得到相同的结果
现在,您可以使用eval
,但这在这里并不可取。在这种情况下,使用eval
将迫使输入字符串的人知道变量的确切名称……这是一个可移植性、可维护性、安全性等问题。灾难即将发生
可能有更好的解决方案,例如,创建一个简单的地图:
map = {
'A' 'Hello'
'B' 'Hola'
'1' 'Goodbye'
};
userText = input('What is your message: ', 's');
str = map{strcmpi(map(:,1), userText), 2};
disp(['The output is ', str]);
我建议使用map对象来包含所需内容。这将绕过eval
功能(我建议避免类似瘟疫的情况)。这是非常简单的阅读和理解,并且是非常有效的,特别是在长输入字符串的情况下
translation = containers.Map()
translation('A') = 'Hola';
translation('B') = 'Hello';
translation('1') = 'Goodbye';
inputString = 'ABA1BA1B11ABBA';
resultString = '';
for i = 1:length(inputString)
if translation.isKey(inputString(i))
% get mapped string if it exists
resultString = [resultString,translation(inputString(i))];
else
% if mapping does not exist, simply put the input string in (covers space case)
resultString = [resultString,inputString(i)];
end
end
我认为你需要为空格'
添加特殊的句柄。因为他在一个循环中逐个计算每个字符,所以没有问题。但是评估整个字符串是不同的。一个“地图”肯定比这个更好。是的,但仍然是用户的选择,取决于问题。如果他已经在.mat文件中有了变量,并且map太大而无法执行,那么eval可以是另一个简单的解决方案。这个解决方案非常好,特别是因为它不使用任何循环。我预见到的唯一问题是,这是否需要映射到多个值。当然可以调整它来处理这个问题。@MZimmerman6:当然,要正确地处理这个问题,还需要添加/调整更多的东西;用户可能会键入映射中不存在的内容,'a'
和'a'
实际上应该映射到不同的值,等等,举几个例子。注意:如果用户输入尚未定义的字符,这也会失败。非常正确,要使这样的内容真正健壮,需要做更多的工作。要实现这一点,您可以简单地使用num2str(1)
或类似的方法将数字添加到字符串/字符中。但是,这不应该是一个问题,因为您使用的输入方法自动表示,无论用户输入什么,都将被解释为字符串。