MATLAB: Adding continuously to get a sum of how many words there are

MATLAB: Adding continuously to get a sum of how many words there are

matlab functionstring

function getWords
str = char('jeff john 2td');
n = size(str,1);
for t=0
for i = 1:n
if str(i,1) == isletter(str(i,1))
if str(i,1) == isnumeric(str(i,1))
disp('For', str(i,1), 'it isnt a word')
I want to continuously add +1 to my t value of originally 0 when I get another word into my string, but as of right now it keeps displaying “t” as 0 for some reason. Trying to get the function to be capable of displaying how many words there are, but if the one of the words starts with a number the function WILL NOT count it as a word. For example: if the string is ‘my 2sons had lunch’ it would display it as the t variable having 3 words.
Thank you for your assistance.

Best Answer

  • NEW ANSWER: treats a word as one that starts with a letter
    function wordcount = getWords
    str = 'jeff john 2lion lion2 this2that dog.';
    strcell = regexpi(str, 'w*', 'match');
    %Defining word as one that starts with a letter (this2that would still be a word)
    wordloc = cellfun(@(x) ~isempty(regexpi(x(1), '[a-z]')), strcell);
    wordcount = sum(wordloc); %number of words
    nonwordcount = sum(~wordloc); %number of non-words

    %Displaying words / nonwords
    fprintf('Is a word: %sn', strcell{wordloc})
    fprintf('Not a word: %sn', strcell{~wordloc})
    Is a word: jeff
    Is a word: john
    Is a word: lion2
    Is a word: this2that
    Is a word: dog
    Not a word: 2lion
    OLD ANSWER: One way to do this without loops:
    function getWords
    str = 'jeff john 2td tomorrow 3e4 a23 dog.';
    strcell = regexp(str, 's+', 'split');
    wordloc = cellfun(@(x) isempty(regexp(x, '[^a-zA-Z.]', 'once')), strcell); %gets location of string with only letter a-zA-Z
    wordcount = sum(wordloc); %number of words, 4
    nonwordcount = sum(~wordloc); %number of non-words
  • Add a Comment

    Your email address will not be published. Required fields are marked *