str2double returns NaN because '3;4' is not a number, it is two numbers. You need to split the text into different numbers first. One of the many ways to do that is this:
c = '1,,-3.1;+4e2';%modified to cover more representations of numbers
%a number can only contain 0-9, a dot, a minus, a plus, or an E
%remove the * if you don't want multiple delimiters to be merged
split_values = regexp(c,'[^0-9\.\-+eE]*','split');
str2double(split_values)