在MatLab中创建翻译器

在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

我试图在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(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)
或类似的方法将数字添加到字符串/字符中。但是,这不应该是一个问题,因为您使用的输入方法自动表示,无论用户输入什么,都将被解释为字符串。