我尝试将句子中每个单词的第一个字母大写。 谁能解释一下为什么我在输入带有空格 ex(asdasd asdasd) 的单词后出现一些错误。
#include <iostream>
#include <cstring>
#include <vector>
#include <sstream>
#include <string>
using namespace std;
int main()
{
char str[50];
char firstLetter;
int iASCII;
vector<string> vecString;
cin.getline(str, 100);
stringstream ss(str);
string sIndivWords;
char cSpace = ' ';
while (getline(ss, sIndivWords, cSpace))
{
vecString.push_back(sIndivWords);
}
iASCII = vecString[0].at(0);
if (iASCII >= 97 && iASCII <= 122)
{
for (int i = 0; i < vecString.size(); i++)
{
firstLetter = vecString[i].at(0);
putchar(toupper(firstLetter));
for (int j = 1; j < 20;j++)
{
cout << vecString[i].at(j);
}
}
}
}
最佳答案
正如其他人在他们的评论中所述,您的(非)魔数(Magic Number) 20
是问题所在,此处:
for (int j = 1; j < 20;j++) {
cout << vecString[i].at(j);
}
当 vecString[i]
少于 20 个字符时会崩溃!
尝试使用更合适的内容,例如:
for (int j = 1; j < vecString[i].length(); j++) {
cout << vecString[i].at(j);
}
作为旁注,您尝试使用 vecString.size()
将失败,因为它给您的是单独字符串的数量,而不是任何一个字符串的长度。
关于c++ - test.exe 中 0x76C9FD62 处的错误未处理异常:Microsoft C++ 异常:内存位置 0x006FF870 处的 std::out_of_range。发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58247803/