总的来说,这只是作业的一小部分,但是这个函数给我一个错误“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 ;
}
}
我截取了错误消息的屏幕截图:http://i.imgur.com/maQN7Vs.png
错误说:
Debug Assertion失败!
程序: ..ects] English.SMS_Translator \调试\ English._SMS_Translator.exe 文件:e:\ microsoft visual studio 10.0 \ vc \ include \ xstring Line:1440
表达式:字符串下标超出范围
有关程序如何导致断言失败的信息, 请参阅关于断言的Visual C ++文档。
(按重试调试应用程序)
非常感谢任何帮助或建议来解决此错误。
答案 0 :(得分:2)
for (int i = 0; i <= word.length(); ++i)
应该是
for (int i = 0; i < word.length(); ++i)
N尺寸容器的下标范围从0到N-1
答案 1 :(得分:0)
你的功能有几个错误。主要的错误是它不清楚函数是做什么的。:)它要么用户只输入一个字符或一个字符。
类std :: string的索引的有效范围是[0,length()-1]。而不是
for (int i = 0; i <= word.length(); ++i)
必须有
for (int i = 0; i < word.length(); ++i)
但是如果你写的话会更好。
for ( string::size_type i = 0; i < word.length(); ++i )
secons错误是变量i的声明
void English_to_SMS(void)
{
int i;
在函数中没有使用,因为在for循环中你声明了另一个隐藏前一个声明的局部变量i。所以你可以删除声明
int i;
此外,我认为声明std :: string类型的对象只保留一个字符没有任何意义。所以不是声明
string letter;
我会使用声明
char letter;
例如
char letter;
//...
letter = word[i];
if (letter == 'y') {
声明
bool vowel;
也未在函数中使用。