我尝试将句子中单词的每个首字母大写。 有人可以解释一下为什么输入空格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);
}
}
}
}
答案 0 :(得分:0)
正如其他人在评论中指出的那样,您的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()
将会失败,因为这将为您提供单独的字符串数,而不是任何一个字符串的长度。