Мне было интересно, есть ли способ получить только целые числа из строки текста, используя C++ без использования seekg().
Допустим, у моего файла data.txt
есть только эта строка: Position {324,71,32}
в нем, и я хочу получить только целочисленные значения.
Я попробовал следующий код, но это не сработало, и я искал в Интернете решение и не нашел - почему я спрашиваю.
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
string x, num1, num2, num3;
fstream fs;
fs.open("data.txt", ios::in);
if (fs.fail())
cerr << "Failed to open file";
fs >> x;
num1 = x;
fs >> x;
num2 = x;
fs >> x;
num3 = x;
cout << num1 << " " << num2 << " " <<num3 << endl;
return 0;
}
1.Посмотреть текстовую строку, чтобы идентифицировать символы, составляющие ваши индивидуальные номера.
2.конвертировать строку, содержащую число, в целое число, используя atoi
Победа 3.declare
#include <iostream>
#include <stdlib.h>
using namespace std;
int main() {
cout << "hello world!" << endl;
char * input = "Position {324,71,32}";
cout << "input: " << input << endl;
//find start of numbers
int i = 0;
char cur = 'a';
while (cur != '{') {
cur = input[i];
i++;
}
//identify individual numbers and convert them from char array to integer
while (cur != '}') {
cur = input[i];
//identify individual number
char num_char[100];
int j = 0;
while (cur != ',' && cur != '}') {
num_char[j] = cur;
j++;
i++;
cur = input[i];
}
num_char[j] = '\0';
//convert to integer
int num = atoi(num_char);
cout << "num: " << num << " num*2: " << num*2 << endl;
i++;
}
return 0;
}
Попробуйте что-нибудь еще:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
string x;
char c;
int num1, num2, num3;
fstream fs;
fs.open("data.txt", ios::in);
if (!fs)
cerr << "Failed to open file";
else
{
fs >> x; // "Position"
fs >> c; // '{'
fs >> num1;
fs >> c; // ','
fs >> num2;
fs >> c; // ','
fs >> num3;
if (!fs)
cerr << "Failed to read file";
else
cout << num1 << " " << num2 << " " << num3 << endl;
}
return 0;
}
Или это:
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main()
{
string s, x;
char c;
int num1, num2, num3;
fstream fs;
fs.open("data.txt", ios::in);
if (!fs)
cerr << "Failed to open file";
else if (!getline(fs, s))
cerr << "Failed to read file";
else
{
istringstream iss(s);
iss >> x; // "Position"
iss >> c; // '{'
iss >> num1;
iss >> c; // ','
iss >> num2;
iss >> c; // ','
iss >> num3;
if (!iss)
cerr << "Failed to parse line";
else
cout << num1 << " " << num2 << " " << num3 << endl;
}
return 0;
}