单词大写中的字符串下标超出范围错误
string subscript out of range error in word capitalization
实际上,该程序在 Devc++ 中运行良好,但如果我在 VisualStudio 中 运行 它会给我错误,有人知道为什么会这样吗?
程序应该检查它是否必须从 stati 数组中计算出一个字符串,每个单词的每个首字母都大写,然后它必须转换字符串变回小写,statoScelto[] 只是检查字符串是否需要打印。
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string stati[4] = { "italia", "francia", "spagna", "bosnia erzegovina" };
bool statoScelto[4] = { true, false, false, true };
int i, k;
// here there is other code that eventually changes statoScelto[] values.
for (i = 0; i < 4; i++) {
if (statoScelto[i] == true) {
stati[i][0] = toupper(stati[i][0]);
for (k = 0; k < 16; k++) {
if (stati[i][k] == ' ') {
stati[i][k + 1] = toupper(stati[i][k + 1]);
}
}
std::cout << "\n" << stati[i];
for (k = 0; k < 16; k++) {
if (stati[i][k] == ' ') {
stati[i][k + 1] = tolower(stati[i][k + 1]);
}
}
stati[i][0] = tolower(stati[i][0]);
}
}
system("pause>0");
}
现在,程序应该打印:
意大利
波斯尼亚厄塞哥维那
但是当运行时会弹出字符串下标超出范围的错误。
有人知道它有什么问题吗?
您的代码有几个问题:
您需要在您定义的字符串字符周围放置双引号。
例如:
std::string 颜色[4] = { "蓝色", "红色",
"橙色", "黄色" };
大小 16 对最后一个单词有意义,其中大小为 16,但对于所有其他单词,您仍在尝试访问不存在的位置。
也许可以为每个单词的大小设置一个变量来解决这个问题。
你也可以把 if (stati[i][k] == ' ') 条件放在循环之前,所以它只在这种情况下进入
实际上,该程序在 Devc++ 中运行良好,但如果我在 VisualStudio 中 运行 它会给我错误,有人知道为什么会这样吗?
程序应该检查它是否必须从 stati 数组中计算出一个字符串,每个单词的每个首字母都大写,然后它必须转换字符串变回小写,statoScelto[] 只是检查字符串是否需要打印。
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string stati[4] = { "italia", "francia", "spagna", "bosnia erzegovina" };
bool statoScelto[4] = { true, false, false, true };
int i, k;
// here there is other code that eventually changes statoScelto[] values.
for (i = 0; i < 4; i++) {
if (statoScelto[i] == true) {
stati[i][0] = toupper(stati[i][0]);
for (k = 0; k < 16; k++) {
if (stati[i][k] == ' ') {
stati[i][k + 1] = toupper(stati[i][k + 1]);
}
}
std::cout << "\n" << stati[i];
for (k = 0; k < 16; k++) {
if (stati[i][k] == ' ') {
stati[i][k + 1] = tolower(stati[i][k + 1]);
}
}
stati[i][0] = tolower(stati[i][0]);
}
}
system("pause>0");
}
现在,程序应该打印:
意大利
波斯尼亚厄塞哥维那
但是当运行时会弹出字符串下标超出范围的错误。 有人知道它有什么问题吗?
您的代码有几个问题:
您需要在您定义的字符串字符周围放置双引号。 例如: std::string 颜色[4] = { "蓝色", "红色", "橙色", "黄色" };
大小 16 对最后一个单词有意义,其中大小为 16,但对于所有其他单词,您仍在尝试访问不存在的位置。 也许可以为每个单词的大小设置一个变量来解决这个问题。
你也可以把 if (stati[i][k] == ' ') 条件放在循环之前,所以它只在这种情况下进入