如何正确操作wstrings?
How to properly operate with wstrings?
我正在学习 wstrings,因为我想了解项目的 UTF-8。我做了一个简单的程序来测试使用 wstrings 的操作:
int main()
{
std::wstring test;
std::wstring test2;
std::wstring test3;
int n;
getline(std::wcin, test);
std::wcout << "\n" << test;
for (n = 0; n < test.size(); n++)
{
test[n] += n * n;
test2[n] = test[n];
}
std::wcout << test2 << "\n";
for (n = 0; n < test2.size(); n++)
{
test2[n] -= n * n;
test3[n] = test[n];
}
std::wcout << test3 << "\n";
return 0;
}
当我执行它时出现此错误:“字符串下标超出范围”
这是我的第一个 C++“严肃”项目,感谢任何帮助!
您的 test2
字符串为空,因此当您这样做时:
test2[n] = test[n];
您在无效位置编制索引,这会调用未定义的行为。这可能会导致抛出异常。
相反,您可以这样做:
test2.push_back(test[n]);
你和test3
有同样的问题,你可以用同样的方法解决。
或者,一旦您读入 test
,您可以使用适当数量的元素初始化 test2
和 test3
:
getline(std::wcin, test);
std::wstring test2(test.size());
std::wstring test3(test.size());
现在您可以毫无问题地索引这些字符串。
此外,对于您的问题,您甚至不需要对 test2
进行任何索引。一旦你修改了 test
,你可以像这样简单地分配它:
for (n = 0; n < test.size(); n++)
{
test[n] += n * n;
}
std::wstring test2 = test;
test3
.
也类似
我正在学习 wstrings,因为我想了解项目的 UTF-8。我做了一个简单的程序来测试使用 wstrings 的操作:
int main()
{
std::wstring test;
std::wstring test2;
std::wstring test3;
int n;
getline(std::wcin, test);
std::wcout << "\n" << test;
for (n = 0; n < test.size(); n++)
{
test[n] += n * n;
test2[n] = test[n];
}
std::wcout << test2 << "\n";
for (n = 0; n < test2.size(); n++)
{
test2[n] -= n * n;
test3[n] = test[n];
}
std::wcout << test3 << "\n";
return 0;
}
当我执行它时出现此错误:“字符串下标超出范围”
这是我的第一个 C++“严肃”项目,感谢任何帮助!
您的 test2
字符串为空,因此当您这样做时:
test2[n] = test[n];
您在无效位置编制索引,这会调用未定义的行为。这可能会导致抛出异常。
相反,您可以这样做:
test2.push_back(test[n]);
你和test3
有同样的问题,你可以用同样的方法解决。
或者,一旦您读入 test
,您可以使用适当数量的元素初始化 test2
和 test3
:
getline(std::wcin, test);
std::wstring test2(test.size());
std::wstring test3(test.size());
现在您可以毫无问题地索引这些字符串。
此外,对于您的问题,您甚至不需要对 test2
进行任何索引。一旦你修改了 test
,你可以像这样简单地分配它:
for (n = 0; n < test.size(); n++)
{
test[n] += n * n;
}
std::wstring test2 = test;
test3
.