C++字符串程序引起的运行时错误
Runtime Error Caused by C++ String Program
我正在用 C++ 创建这个程序,它要求用户输入带有大小写字母的电影片名。它确定并显示标题中大小写字母的数量。然后它创建 3 个字符串,将原始字符中的所有字符转换为大写,然后转换为小写,最后转换为相反的大小写。它分别显示这些字符串。问题出现在它显示大小写字母的数量之后。该程序输出一条错误消息,指出它必须请求运行时以一种不寻常的方式终止它。我需要一些帮助来确定问题并解决它。谢谢
这是我的代码:
#include <cstdlib>
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main(int argc, char *argv[])
{
string title, upper, lower, swap;
int upCount = 0, lowCount = 0;
cout << "Please enter your favorite movie title:\n(it should have upper and lowercase letters)" << endl;
getline(cin, title);
for (int i = 0; i < title.size(); i++)
{
if (isupper(title.at(i)))
upCount++;
else if (isalpha(title.at(i)))
lowCount++;
}
cout << title << " has " << upCount << " uppercase letters and " << lowCount << " lowercase letters." << endl;
for (int i = 0; i < title.size(); i++)
{
upper.at(i) = title.at(i);
lower.at(i) = title.at(i);
swap.at(i) = title.at(i);
}
for (int i = 0; i < title.size(); i++)
{
if (isupper(title.at(i)))
swap.at(i) = tolower(int(swap.at(i)));
else
swap.at(i) = toupper(int(swap.at(i)));
upper.at(i) = toupper(int(upper.at(i)));
lower.at(i) = tolower(int(lower.at(i)));
}
cout << upper << endl
<< lower << endl
<< swap << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
您永远不会将 upper
、lower
或 swap
初始化为任何值。当您执行 upper.at(i)
、lower.at(i)
或 swap.at(i)
时,程序将中断。
您可以通过在第二个循环之前将 upper
、lower
和 swap
全部设置为 title
来解决此问题。
变化:
...
cout << title << " has " << upCount << " uppercase letters and " << lowCount << " lowercase letters." << endl;
upper = lower = swap = title; //Add this
for (int i = 0; i < title.size(); i++)
...
输出:
Please enter your favorite movie title:
(it should have upper and lowercase letters)
V for Vendetta
V for Vendetta has 2 uppercase letters and 10 lowercase letters.
V FOR VENDETTA
v for vendetta
v FOR vENDETTA
我正在用 C++ 创建这个程序,它要求用户输入带有大小写字母的电影片名。它确定并显示标题中大小写字母的数量。然后它创建 3 个字符串,将原始字符中的所有字符转换为大写,然后转换为小写,最后转换为相反的大小写。它分别显示这些字符串。问题出现在它显示大小写字母的数量之后。该程序输出一条错误消息,指出它必须请求运行时以一种不寻常的方式终止它。我需要一些帮助来确定问题并解决它。谢谢 这是我的代码:
#include <cstdlib>
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main(int argc, char *argv[])
{
string title, upper, lower, swap;
int upCount = 0, lowCount = 0;
cout << "Please enter your favorite movie title:\n(it should have upper and lowercase letters)" << endl;
getline(cin, title);
for (int i = 0; i < title.size(); i++)
{
if (isupper(title.at(i)))
upCount++;
else if (isalpha(title.at(i)))
lowCount++;
}
cout << title << " has " << upCount << " uppercase letters and " << lowCount << " lowercase letters." << endl;
for (int i = 0; i < title.size(); i++)
{
upper.at(i) = title.at(i);
lower.at(i) = title.at(i);
swap.at(i) = title.at(i);
}
for (int i = 0; i < title.size(); i++)
{
if (isupper(title.at(i)))
swap.at(i) = tolower(int(swap.at(i)));
else
swap.at(i) = toupper(int(swap.at(i)));
upper.at(i) = toupper(int(upper.at(i)));
lower.at(i) = tolower(int(lower.at(i)));
}
cout << upper << endl
<< lower << endl
<< swap << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
您永远不会将 upper
、lower
或 swap
初始化为任何值。当您执行 upper.at(i)
、lower.at(i)
或 swap.at(i)
时,程序将中断。
您可以通过在第二个循环之前将 upper
、lower
和 swap
全部设置为 title
来解决此问题。
变化:
...
cout << title << " has " << upCount << " uppercase letters and " << lowCount << " lowercase letters." << endl;
upper = lower = swap = title; //Add this
for (int i = 0; i < title.size(); i++)
...
输出:
Please enter your favorite movie title:
(it should have upper and lowercase letters)
V for Vendetta
V for Vendetta has 2 uppercase letters and 10 lowercase letters.
V FOR VENDETTA
v for vendetta
v FOR vENDETTA