【发布时间】:2016-05-09 09:32:43
【问题描述】:
我正在用 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;
}
【问题讨论】:
-
你做了什么来调试你的代码?它在哪一行失败?
-
@jmarkmurphy 它似乎在第二个 for 循环之后的任何地方都失败了。我不知道有什么方法可以像通常那样调试它,因为它在运行时会崩溃。
-
您可以使用源调试器吗?如果没有,您可以将简单的消息输出到日志文件或控制台,例如“我到了”,甚至可能是该位置的一些重要变量值。这可能需要几次迭代,但您可以缩小故障位置。
-
对不起,我不知道源调试器是什么。但是,通过使用 cout 语句,我能够确定程序在进入第二个 for 循环时立即失败。
标签: c++ string runtime dev-c++