Hi there, i have a small program in C++ that counts how many words are in a sentence. I understand the steps it takes to do this but am having difficulty get those steps in code. i then need to discard all leading zero's. find a character using isalpha() increment counter. find next zero and start over. This is what i have so far. Code: int getWords (char *ptr2)//FUNCTION { int sum = 0; bool check = false;//FLAG while (!check)//WHILE LOOP for (int count = 0; count < LENGTH; count++)//COUNTER { if ((!isalpha(ptr2[count])) && (sum == 0))//FIND LEADING ZERO'S { //DO NOTHING } if (isalpha(ptr2[count]))//FIND CHARACTER { sum++; //BEGINNING OF A WORD, START COUNTER for (int num = count; num < LENGTH; num++) { //FIND NEXT SPACE if (!isalpha(ptr2[num])) { check = false; count = num; } else check = true; } } } return sum; }
Please read the "Before you make a query" thread, so we don't have to look at ugly, unformatted code in order to help you.
I'm sorry, i didn't know i could tag them like this. Here is my code, its about as clean as it gets for me. I apologise again. Code: int getWords (char *ptr2)//FUNCTION { int sum = 0; bool check = false;//FLAG while (!check)//WHILE LOOP for (int count = 0; count < LENGTH; count++)//COUNTER { if ((!isalpha(ptr2[count])) && (sum == 0))//FIND LEADING ZERO'S { //DO NOTHING } if (isalpha(ptr2[count]))//FIND CHARACTER { sum++; //BEGINNING OF A WORD, START COUNTER for (int num = count; num < LENGTH; num++) { //FIND NEXT SPACE if (!isalpha(ptr2[num])) { check = false; count = num; } else check = true; } } } return sum; }
First of all, silly or obvious comments are worthless. Code: int getWords (char *ptr2)//FUNCTION [COLOR=Red]no kidding![/COLOR] while (!check)//WHILE LOOP [COLOR=Red]really![/COLOR] Secondly, the use of things which have not been clearly shown may suggest that there is an uninitialized variable, when in fact everything might be fine. My crystal is in the shop for 'ball' joints. Code: count < LENGTH [COLOR=Red]what, exactly, is LENGTH, and from whence does it come?[/COLOR] Thirdly, erroneous comments are as bad as useless comments. You imply that words are separated by zeroes. Perhaps you mean non-alphabetic characters? Code: if ((!isalpha(ptr2[count])) && (sum == 0[COLOR=Red]))//FIND LEADING ZERO'S[/COLOR] and Code: [COLOR=Red]//FIND NEXT SPACE[/COLOR] if (!isalpha(ptr2[num])) { check = false; count = num; } perhaps you meant "find next non-alphabetic character"? Further, inappropriately named functions are misleading. Code: int getWords (char *ptr2)//FUNCTION Isn't this really "getWordCount"??? "getWords" would return the words. In any event, you should pass the function a string, as in the C definition of string, so that the maximum length to work with can be determined by strlen or by the occurrence of a nul character, OR (this is C++, right, says "bool"?) use the C++ string class, which carries the length as a member. Here's an untested snippet, suitable for a C string, you might consider. Code: while (*ptr && !isalpha (ptr++); [COLOR=Red]Note the semicolon; this loop does nothing but find alpha or end.[/COLOR] if (*ptr) count++; Word found, since not pointing at nul. while (*ptr && isalpha (ptr++)); Nothing but find end of alpha (thus, one word) Wash, rinse, and repeat until nul found, return the count.