Reputation: 21
Overall this is a small portion of the assignment but this function is giving me an error "Debug Assertion Failed!"
void English_to_SMS(void)
{
int i;
bool vowel;
string word;
string letter;
cout << "Enter y, n or m: ";
cin >> word;
for (int i = 0; i <= word.length(); ++i)
{
letter = word[i];
if (letter == "y") {
cout << "yes";
}
else if (letter == "n") {
cout << "no";
}
else if (letter == "m") {
cout << "maybe";
}
else
{
cout << letter ;
}
}
I took a screenshot of the error message: https://i.sstatic.net/CGq98.png
The error says:
Debug Assertion Failed!
Program: ..ects]English.SMS_Translator\Debug\English._SMS_Translator.exe File:e:\microsoft visual studio 10.0\vc\include\xstring Line:1440
Expression: string subscript out of range
For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.
(Press retry to debug the application)
Any help or suggestion to solve this error would be greatly appreciated.
Upvotes: 0
Views: 87
Reputation: 311048
There are several mistakes in your function. The main mistake is that it is unclear what the function does.:) Either it asks the user to enter only a single character or a word of characters.
The valid range of indices for class std::string is [0, length() -1]. So instead of
for (int i = 0; i <= word.length(); ++i)
there must be
for (int i = 0; i < word.length(); ++i)
But it would be even better if you would write
for ( string::size_type i = 0; i < word.length(); ++i )
The secons mistake is the declaration of variable i
void English_to_SMS(void)
{
int i;
that is not used in the function because in the for loop you declare another local variable i that hides the previous declaration. So you may remove statement
int i;
Also I do not see any sense to declare an object of type std::string that to keep only one character. So instead of declaration
string letter;
I would use declaration
char letter;
For example
char letter;
//...
letter = word[i];
if (letter == 'y') {
Declaration
bool vowel;
is also not used in the function.
Upvotes: 0
Reputation: 5102
for (int i = 0; i <= word.length(); ++i)
Should be
for (int i = 0; i < word.length(); ++i)
Subscript ranges of N-sized container go from 0 to N-1
Upvotes: 2