Effacer les filtres
Effacer les filtres

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

2 vues (au cours des 30 derniers jours)
John Lutz
John Lutz le 29 Sep 2017
Commenté : Steven Lord le 29 Sep 2017
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))
t+1;
end
if str(i,1) == isnumeric(str(i,1))
disp('For', str(i,1), 'it isnt a word')
end
end
end
disp(t);
end
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.
  1 commentaire
Steven Lord
Steven Lord le 29 Sep 2017
How many words would you say this sentence contains?
Jean-Luc counted to 3 then asked "Q, what are you doing here?"
Do you consider Jean-Luc to be zero, one, or two words? Does the hyphen disqualify it from being a word, split those two collections of characters into separate words, or join the two collections of characters together into one word?
Do you consider 3 to be a word?
Do you consider "Q, to be a word? In this context Q is the name of the character to whom Jean-Luc asked the question.

Connectez-vous pour commenter.

Réponse acceptée

OCDER
OCDER le 29 Sep 2017
Modifié(e) : OCDER le 29 Sep 2017
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: %s\n', strcell{wordloc})
fprintf('Not a word: %s\n', strcell{~wordloc})
Outputs:
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
  5 commentaires
OCDER
OCDER le 29 Sep 2017
I've updated the answer above that should answer this question. Hope this helps!
Cedric
Cedric le 29 Sep 2017
Modifié(e) : Cedric le 29 Sep 2017
As you are using regular expressions, note that the following would work too (here applied to your test str):
>> numel( regexp( str, '(^|\s)[a-zA-Z]' ))
ans =
5

Connectez-vous pour commenter.

Plus de réponses (1)

Walter Roberson
Walter Roberson le 29 Sep 2017
t+1;
retrieves the value of t, adds 1 to the value, then throws away the value because the phrase ends in a semi-colon. You are not changing t. Perhaps you are thinking of C's t++ or t++1 which are not valid MATLAB syntax.
t = t + 1;

Catégories

En savoir plus sur Programming dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by