-
Non incrementing loop.
Good Morning:
I have been working on this function for two days and I cannot get it to increment properly. Can someone please help me? Here are the instructions for the function:
Write a function named analyzeString. This function is passed a null terminated string as the first parameter. The function uses 3 reference parameters to return the number of vowels, the number of consonants, and the number of separator characters. Assume a separator character is a space, a tab, or a newline. The function declaration is as follows:
void analyzeString (char inputString [], int & numVowels, int & numConsonants, int & numSeparators);
Here is the code that I have so far:
Code:
/* This program will test the
"void analyzeString ( char inputString [], int & numVowels,
int & numConsonants, int & numSeparators)" function*/
#include <iostream>
using namespace std;
void analyzeString ( char inputString [], int & numVowels,
int & numConsonants, int & numSeparators);
void main()
{
const int SIZE = 100;
char inputString [SIZE] = {'l', 'D', '\t', ' ', 's','P','\0'};
int numVowels, numConsonants, numSeparators;
numVowels = numConsonants = numSeparators = 0;
analyzeString (inputString, numVowels,
numConsonants, numSeparators);
cout << numVowels <<'\n';
cout <<numConsonants <<'\n';
cout <<numSeparators <<'\n';
}
* This function will count the number of vowels,
consonants, and separator characters in a string */
#include <iostream>
using namespace std;
void analyzeString ( char inputString [], int & numVowels, int & numConsonants, int & numSeparators)
{
char ch;
ch = inputString[0];
numVowels = 0;
numConsonants = 0;
numSeparators = 0;
int increment = 0;
cout << "in funct \n";
while ( ch != '\0')
{
if ( ch == 65 || ch == 69 || ch == 73 || ch == 79 || ch == 85 || //check for vowels
ch == 97 || ch == 101 || ch == 105 || ch == 111 || ch == 117)
numVowels++;
if (( ch != 65 && ch != 69 && ch != 73 && ch != 79 && ch != 85 && //check for consonants
ch != 97 && ch != 101 && ch != 105 && ch != 111 && ch != 117)
&& (ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122))
numConsonants++;
else
numSeparators++;
} inputString [increment++];
}
The loop does not increment, it is a runaway.
-
That's probably because
Code:
inputString [increment++];
is outside the while loop. Also, you never reassign ch so even if increment was increasing the loop would still be infinite. Suggested fix: write
Code:
ch = inputString[++increment];
as the last line of the while loop.
Also, there's no need to use numbers to represent character literals. You can use "if ( ch == 'A' || ch == 'E' ..." or even "if ( strchr("AEIOU", ch) != NULL ) ...".
-
Yes, definitely remove all those nasty magic numbers in there. Use toupper where it helps.
You should also write your string in the shorter more common form:
Code:
char inputString [SIZE] = "lD\t sP\0";
Oh, and your main should return int, not void, plus your comment on line 24 is missing the slash.
-
Thank you to everyone. I got this one working, now I only have four more to go.