MATLAB Answers

Error on Switch/case with cell array char data

1 view (last 30 days)
James Wang
James Wang on 21 Nov 2020
Answered: James Wang on 21 Nov 2020
Hello I am getting "SWITCH expression must be a scalar or a character vector." when i run my code bellow. I want to take an typed input from the user split it into individual cells and then check the variable with the created switch case concatenating the resulting letter's probability into a new variable. I know it has something to do to converting the inputted cell values into a character vector but I haven't found any good way to do it. Any help would be appreciated
get = input('type(letters only, no puncuation): ' , 's');
split = num2cell(get);
sorted_split = sort(split);
input_prob = [];
for n = 1 : length(sorted_split)
switch sorted_split{n}
case ' '
horzcat(input_prob,0.1859);
case 'a'
horzcat(input_prob,0.0642);
case 'b'
horzcat(input_prob,0.0127);
end
end
...

  2 Comments

Cris LaPierre
Cris LaPierre on 21 Nov 2020
Your code runs for me without giving the error message you mention. Can you share exactly what you are using for input to create the error? Also, please copy/paste the error message here (all the red text). I wonder if the error may be coming from code that you have not shared here.
James Wang
James Wang on 21 Nov 2020
My apologies I have forgotten that I have been playing around with parfor loops for no real reason expect for speed. the error message that is given is
Error using fff (line 9)
SWITCH expression must be a scalar or a character vector.
%#ok<*MFAMB>
tic
close all
get = input('type(letters only, no puncuation): ' , 's');
split = num2cell(get);
input_prob = [];
parfor n = 1 : length(split)
switch split(n)
case ' '
horzcat(input_prob,0.1859);
case 'a'
horzcat(input_prob,0.0642);
case 'b'
horzcat(input_prob,0.0127);
case 'c'

Sign in to comment.

Accepted Answer

James Wang
James Wang on 21 Nov 2020
After looking at multiple answer i have solved my question. I have removed the parfor loop that was there and used Vasishta Bhargava answer for the switch case. Thank you all for your help
close all
get = input('type(letters only, no puncuation): ' , 's');
split = char(lower(get));
input_prob = [];
for n = 1 : length(split)
switch split(n)
case ' '
input_prob = horzcat(input_prob,0.1859);
case 'a'
input_prob= horzcat(input_prob,0.0642);
case 'b'
input_prob = horzcat(input_prob,0.0127);
case 'c'
input_prob = horzcat(input_prob,0.0218);
case 'd'

  0 Comments

Sign in to comment.

More Answers (1)

VBBV
VBBV on 21 Nov 2020
Edited: VBBV on 21 Nov 2020
get = input('type(letters only, no puncuation): ' , 's');
split = char(get);
sorted_split = sort(split);
input_prob = [];
for n = 1 : length(sorted_split)
switch split
case ' '
horzcat(input_prob,0.1859)
case 'a'
horzcat(input_prob,0.0642)
case 'b'
horzcat(input_prob,0.0127)
end
end
Since you are using ' ' in switch-case , use char to convert the input letter

  0 Comments

Sign in to comment.

Products


Release

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!