How to recognize multiplication with out *

Hello!!
I want to write a code where you can input a string of a polynomial for instance '2x+3' and matlab returns the string as '2*x+3'. The user can input any string of a polynomial and matlab adds the * where needed.
I was thinking of possibly using a for loop (length of the string) where it passes through each indices and use isletter or isnumeric and if I get a numeric followed by a letter The code addes a * in between.
Can someone help me implement this or have a better way of doing so. Thanks a lot!

3 Comments

James Tursa
James Tursa on 19 Mar 2015
Edited: James Tursa on 19 Mar 2015
Will there be expressions like 2/3x in the strings? If so, how should they be interpreted? As (2/3)*x or as 2/(3*x)? Will there be parentheses in the expressions?
And of course, how would it deal with the number 3e2, as this is a perfectly legal way of writing the number 300.
True, thanks for those questions!!

Sign in to comment.

 Accepted Answer

James Tursa
James Tursa on 19 Mar 2015
Edited: James Tursa on 19 Mar 2015
Brute force loop:
s = '2x + 3 - 5y';
isdigit = @(x)(x>='0'&x<='9');
s(s==' ') = []; % if you want to protect against blanks
n = numel(s);
t = s(1);
for k=2:n
if( isdigit(s(k-1)) && isletter(s(k)) )
t = [t '*'];
end
t = [t s(k)];
end
t =
2*x+3-5*y
There are ways to vectorize this and not increase the size of t in a loop, but for the small string size you will likely be dealing with it is hardly worth the effort.

More Answers (1)

Guillaume
Guillaume on 19 Mar 2015
Edited: Guillaume on 19 Mar 2015
Assuming you just want to insert a '*' between any number followed by any letter (that is ignore problems like brackets and 3e2 notation):
expression = '2x + 3 - 5y';
newexpression = regexprep(expression, '([0-9])([a-zA-Z])', '$1*$2')
edit: Actually, the following will not insert a '*' when the letter is followed by another number so will cope with 'e' notation:
expression = '2x + 3e5 - 1e2y';
newexpression = regexprep(expression, '([0-9])([a-zA-Z])(?![0-9])', '$1*$2')

Categories

Asked:

on 19 Mar 2015

Edited:

on 20 Mar 2015

Community Treasure Hunt

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

Start Hunting!