将字符串读入数组
read string into array
我想读取一个带有整数和空格的字符串到数组中。例如,我有一个字符串看起来像1 2 3 4 5,我想把它转换成整数数组arr[5]={1, 2, 3, 4, 5}。我该怎么做呢?
我试图删除空白,但这只是分配整个12345到每个数组元素。如果我不这样做,所有元素都会被赋值为1。
for (int i = 0; i < str.length(); i++){
if (str[i] == ' ')
str.erase(i, 1);
}
for (int j = 0; j < size; j++){ // size is given
arr[j] = atoi(str.c_str());
}
注意事项:
- 使用
std::vector
。在编译时,您很可能永远不会知道输入的大小。如果需要,请使用std::array
。 - 如果你有c++ 11可用,也许考虑
stoi
或stol
,因为它们会在转换失败时抛出 - 您可以使用
std::stringstream
完成任务,这将允许您将std::string
视为std::istream
,如std::cin
。我推荐这样做 - 或者,您可以走硬路线,并尝试基于
' '
作为分隔符来标记您的std::string
,这似乎是您正在尝试做的。 - 最后,如果你走标记化路线,为什么要重新发明轮子?使用Boost的拆分功能。
std::vector<int> ReadInputFromStream(const std::string& _input, int _num_vals)
{
std::vector<int> toReturn;
toReturn.reserve(_num_vals);
std::istringstream fin(_input);
for(int i=0, nextInt=0; i < _num_vals && fin >> nextInt; ++i)
{
toReturn.emplace_back(nextInt);
}
// assert (toReturn.size() == _num_vals, "Error, stream did not contain enough input")
return toReturn;
}
标记方法std::vector<int> ReadInputFromTokenizedString(const std::string& _input, int _num_vals)
{
std::vector<int> toReturn;
toReturn.reserve(_num_vals);
char tok = ' '; // whitespace delimiter
size_t beg = 0;
size_t end = 0;
for(beg = _input.find_first_not_of(tok, end); toReturn.size() < static_cast<size_t>(_num_vals) &&
beg != std::string::npos; beg = _input.find_first_not_of(tok, end))
{
end = beg+1;
while(_input[end] == tok && end < _input.size())
++end;
toReturn.push_back(std::stoi(_input.substr(beg, end-beg)));
}
// assert (toReturn.size() == _num_vals, "Error, string did not contain enough input")
return toReturn;
}
现场演示
您的代码arr[j] = atoi(str.c_str());
是错误的。str
是string
,而不是char
。当您使用atoi(const char *)
时,您应该提供&char
参数。所以正确的代码是arr[j] = atoi(&str[j])
。顺便说一下,如果您想将string
更改为int
,则可以使用arr[j] = std::stoul(str)
函数。我希望这能帮到你。
您在一个循环中修改/解析了字符串,但在另一个循环中复制到整数数组。在不设置任何标记的情况下,字符串中所有嵌入的整数开始/结束。所以我们必须在一个循环中完成这两个动作。这段代码并不完美,但给你一些想法;跟你做的一样,但用的是矢量。
string str = "12 13 14";
vector<int> integers;
int start=0,i = 0;
for (; i < str.length(); i++){
if (str[i] == ' ')
{
integers.push_back(atoi(str.substr(start,i).c_str()));
start = i;
}
}
integers.push_back(atoi(str.substr(start,i).c_str()));
相关文章:
- 使用 jsoncpp 解析 json 数组字符串
- C++ 对象数组字符串输入在控制台上不起作用
- 插入了 C++ 数组字符串数据,但在显示输出时不显示
- 无法区分 JSON 对象/数组/字符串
- 为什么数组(字符串类型)的大小是 24 字节,带有单个空格元素
- 如何使用数组字符串进行输入验证
- (C++) 打印字符数组字符串的单词时出现问题
- 使用Back_inserter从任何位置的输入字符中使用Back_inserter进行过滤数组字符串
- C 函数反转字符数组字符串
- 如何在 c++ 中创建数组(字符串 [] )的向量
- 如何返回数组字符串的指针
- char数组字符串混淆
- 如何从字符数组字符串中提取空格
- 是否可以将 Bitset<8> 的值复制到数组字符串而不转换它们?
- C++数组字符串函数
- 如何在函数中操作字符数组(字符串)的指针,该指针在C / C ++中作为参数传递
- visual将音频文件存储到数组/字符串流C++中
- c++在char数组(字符串)上将what替换为
- 将数组字符串转换为intger c++(初学者)
- 需要设置数组字符串长度,使其恰好为13