将字符从一个字符串简单分配到另一个字符串不起作用
Simple assignment of characters from one string to other is not working
我正在尝试使用函数将字符从一个字符串分配给另一个字符串,但出现错误。
"在抛出'std::out_of_range'实例后终止调用 what((: basic_string::at: __n (即 0(>= this->size(( (即 0(">
#include <iostream>
#include <string>
#include <vector>
void split (std::string line)
{
std::string::size_type leng=0;
leng=line.length();
std::string k;
for (long unsigned int i=0;i<leng; i++)
{
k.at(i)=line.at(i);
}
std::cout<<k;
}
int main()
{
std::string line = "";
std::cout << "Enter a string: ";
getline(std::cin, line);
split(line);
}
当你初始化k
它是一个emtpy字符串。因此,正如错误消息所说,k.at(i)
将超出界限。
有很多方法可以复制字符串,您可以使用像std::string k(line);
或k.assign(line)
这样的构造函数,或者您可以使用 resize(( 在循环之前调整k
的大小。
引发此异常是因为在初始内容中创建的任何新字符串都具有 0 len。 通过at()
访问字符时,索引具有字符,但即使在0 时,k
也没有没有值。
您可以先调整字符串的大小,然后使用at()
std::string k;
k.resize(leng);
#include <iostream>
#include <string>
void split (std::string line)
{
std::string::size_type leng = line.length();
std::string k;
for (long unsigned int i = 0; i < leng; i++)
{
k.push_back(line.at(i)); // This is the only real change
}
std::cout << k;
}
int main()
{
std::string line = "";
std::cout << "Enter a string: ";
getline(std::cin, line);
split(line);
}
声明k
时,它是空的。因此,它的大小为 0。您正在使用.at()
函数,该函数访问特定元素(字符(并在超出边界时引发异常。你立即越界,因为k
是空的。
现在,你的函数还没有拆分(还没有,或者你省略了那部分(,但.push_back()
它似乎适合你最擅长的事情。它会将字符添加到字符串的末尾,并根据需要增加字符串;您不必担心手动管理其大小。
您正在尝试访问空字符串的元素,请使用此代码。
#include <iostream>
#include <string>
void split (const std::string& line) // pass parameter by reference to avoid copy
{
std::string::size_type leng = line.length();
std::string k;
k.resize(leng); // use resize to create space for the new characters
for (long unsigned int i = 0; i < leng; i++)
{
k.at(i)=line.at(i);
}
std::cout << k;
}
int main()
{
std::string line = "";
std::cout << "Enter a string: ";
getline(std::cin, line);
split(line);
}
相关文章:
- C++-字符串是否包含一个带有简单循环的单词
- 如何将\x00视为带有00(双零)的简单六边形字符串?
- boost::spirit::x3 中的简单字符串解析器不起作用
- 将字符从一个字符串简单分配到另一个字符串不起作用
- 为什么 for 循环只接受这个简单代码中的最后一个字符串?
- 简单的字符串替换给出错误,尽管参数正确
- 这个简单的 C++ 递归函数来反转字符串有什么问题?
- 在 c++ 中将简单的 xml 解析为字符串
- 有没有一种简单的方法可以将矢量 int 集转换为字符串输出?
- 在链接列表中添加字符串的简单方法
- 固定长度的最常见子字符串 - 需要简单的解决方案
- 有没有一种简单的方法可以从嵌入的 GNU ARM C++字符串中解析浮点数?
- C++简单的字符串程序
- 简单的游戏,同时循环和检查字符串
- 比较字符串大小写不区分的简单方法是什么?
- 一种在视图中用 ID 替换字符串的简单方法
- 你如何使字符串小写(简单的方法)?(C++)
- 有没有一种简单的方法可以将系统命令的输出转换为字符串
- 不同编译器版本的C++中的奇怪行为(字符串通过引用传递):参见简单的程序说明
- C字符串:简单问题