由C++;字符串程序 我在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; } #包括 #包括 #包括 #包括 使用名称空间std; int main(int argc,char*argv[]) { 字符串标题,上,下,交换; int upCount=0,lowCount=0; cout

由C++;字符串程序 我在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; } #包括 #包括 #包括 #包括 使用名称空间std; int main(int argc,char*argv[]) { 字符串标题,上,下,交换; int upCount=0,lowCount=0; cout,c++,string,runtime,dev-c++,C++,String,Runtime,Dev C++,您从不将上限、下限或交换初始化为任何值。当您执行上限.at(i)、下限.at(i)或交换.at(i)时,程序将中断 您可以通过在第二个循环之前将upper、lower和swap全部设置为title来解决此问题 更改: ... cout << title << " has " << upCount << " uppercase letters and " << lowCount << " lowercase lette

您从不将
上限
下限
交换
初始化为任何值。当您执行
上限.at(i)
下限.at(i)
交换.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++)
...

你做了什么来调试你的代码?它在哪一行失败?@jmarkmurphy它似乎在第二个for循环之后的任何地方都会失败。我不知道如何像通常那样调试它,因为它在运行时会崩溃。你有权访问源代码调试程序吗?如果没有,你可以将简单消息输出到日志文件或控制台,如“我到这里了”,甚至可能是该位置的一些重要变量值。这可能需要几次迭代,但您可以缩小失败位置的范围。抱歉,我不知道源调试器是什么。但是,我能够通过使用cout语句识别程序在到达第二个for循环时失败。如果我真的很愚蠢,我很抱歉d现在,但我不完全理解你指出的错误。我不认为它超出了范围,因为标题的长度总是比最后一个索引多一个,并且上限
下限
交换
标题
第二个for循环。然后我将它们设置为大写、小写或相反版本。@CZou48关于越界的说法你是对的。我读错了这些语句。但是,在第二个循环中,
upper
lower
swap
都未初始化,这意味着你不能使用
.at()
设置任何内容。您能告诉我如何解决此问题吗?我如何在不知道用户将为
标题输入什么内容的情况下初始化这些字符串。我将其添加到我的答案中。哦,对不起,我刚刚意识到我可以在不设置每个字母的情况下将字符串相互设置
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