如何将字符串中的多个数字转换为整数
Posted
技术标签:
【中文标题】如何将字符串中的多个数字转换为整数【英文标题】:How to convert multiple numbers in a string into ints 【发布时间】:2018-05-03 00:17:49 【问题描述】:我对如何获取多个包含数字的字符串并将它们转换为 int 感到困惑。我有多行字符串,它们以数据形式存储到整数中,然后将它们插入到称为值的二维数组中。之前在 *** 上发布了一个类似的问题;但是它似乎对我不起作用。我打印出了data中的每一行是什么,data中的每个字符串如下。
75
95 64
17 42 82
18 35 87 10
但是,当我在 main 中使用两个 for 循环从 value 中输出数字时,它会输出为 this。
75 0 0 0 95 64 0 0
95 64 0 0 17 42 82 0
17 42 82 0 18 35 87 10
18 35 87 10 0 0 0 0
我在打印sizeof(values)和sizeof(values[0])的时候发现数组values中有8列8个元素;但是,该程序似乎作为最后一个打印语句终止,我打印 hello 的地方没有发生。我在下面提供了我正在使用的代码。我想知道为什么会这样 以及我该如何解决?谢谢。
//const char DELIMITER = ' ';
int **values, // This is your 2D array of values, read from the file.
**sums; // This is your 2D array of partial sums, used in DP.
int num_rows; // num_rows tells you how many rows the 2D array has.
// The first row has 1 column, the second row has 2 columns, and
// so on...
bool load_values_from_file(const string &filename)
ifstream input_file(filename.c_str());
if (!input_file)
cerr << "Error: Cannot open file '" << filename << "'." << endl;
return false;
input_file.exceptions(ifstream::badbit);
string line;
vector<string> data;
try
while (getline(input_file, line))
data.push_back(line);
num_rows ++;
input_file.close();
catch (const ifstream::failure &f)
cerr << "Error: An I/O error occurred reading '" << filename << "'.";
return false;
for(int x = 0; x < data.size(); x++)
cout << data[x] << endl;
//https://***.com/questions/1321137/convert-string-containing-several-numbers-into-integers
//Help on making multiple numbers in a string into seperate ints
values = new int*[num_rows];
vector<int> v;
for(int y = 0; y < data.size(); y++)
istringstream stream(data[y]);
values[y] = new int[y + 1];
int z = 0;
while(1)
int n;
stream >> n;
if(!stream)
break;
values[y][z] = n;
z++;
z = 0;
sums = values;
return true;
int main(int argc, char * const argv[])
if (argc != 2)
cerr << "Usage: " << argv[0] << " <filename>" << endl;
return 1;
string filename(argv[1]);
if (!load_values_from_file(filename))
return 1;
cout << sizeof(values) << endl;
cout << sizeof(values[0]) << endl;
for(int x = 0; x < sizeof(values); x++)
for(int y = 0; y < sizeof(values[x]); y++)
cout << values[x][y] << endl;
cout << endl;
cout << "hello" << endl;
return 0;
【问题讨论】:
您的问题不符合minimal reproducible example 的所有要求,如***.com 的help center 中所述,因此无法提供权威答案。什么是“总和”?生成输出的代码在哪里?如果输出未正确生成,您希望任何人如何找出未显示的代码中的问题?您是如何得出这样的结论,即问题一定出在解析输入的代码中,而不是在生成输出的代码中?当您使用调试器单步调试程序时,您做了哪些观察? 抱歉,我不想添加太多行,我认为这些只是多余的代码行,不需要显示。我将对其进行编辑以包含它 确实,***.com 不是一个可以倾倒整个程序并等待有人找出问题所在的网站。这就是为什么要求是“minimal reproducible example”,而不是“整个程序”。此外,正如我所问的“当您使用调试器单步执行程序时,您做了什么观察”。具体来说:在问题中显示的函数末尾设置断点并使用调试器检查values
数组中的值后,调试器告诉您其中有什么?
正如我所料,您尝试打印值的代码已损坏。 sizeof()
没有做你认为的事情。指向一个指针的int **
的sizeof()
与指向十亿个指针的int **
的sizeof()
的值相同。
我第一次看到 values 有 8 列,每个数组有 8 个元素。但是,在第 4 个数组之后,程序终止,因为当我在打印所有数字之前尝试打印 array[4][0] 时,它也崩溃了。我将编辑我的问题以包含此详细信息。
【参考方案1】:
看到这个:
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;
int main()
string str;
ifstream fs("D:\\Myfolder\\try.txt", ios::in);
stringstream ss;
std::string item;
if (fs.is_open())
ss << fs.rdbuf();
str = ss.str();
cout << str << endl;
fs.close();
cout << "\n\n Output \n\n";
while (std::getline(ss, item, ' '))
cout << std::atoi(item.c_str()) <<" ";
return 0;
【讨论】:
您的输出缺少第一列中的几个条目 @bcr:数字 75(之前已删除)、 95,17 和 18 之前有空格,使用来自 OP 的复制粘贴,与分隔符冲突,因此它们丢失了。我删除了输出以避免混淆。以上是关于如何将字符串中的多个数字转换为整数的主要内容,如果未能解决你的问题,请参考以下文章
如何将日期(“Ymd”)的输出转换为 PHP 中的数字? [复制]