Другие языки программирования и технологии

Как открыть файл на C++ ?

У меня есть 5 текстовых файлов с именами test1.txt, test2.txt и т. д. до test5.txt. Мне необходимо каждый из них открыть в цикле. Как сделать так, чтобы имя файла формировалось в цикле автоматически. То есть, имя test бралось из переменной filename, затем к ней прибавлялось значение итератора i, затем добалялось расширение, которое берется из переменной format.

И чтобы в итоге получить в переменной file, например: test1.txt и уже этот файл открыть.
Помогите, как сложить эти строки?

string filename = "test";
string format = ".txt";

for(int i = 0; i < 5; i++) {

string file = filename + i + format; // Как правильно сделать?

ifstream f;

f.open(file);

}
...
#include <sstream>
...
string name = "test";
string fmt = ".txt";
for(int i = 1; i <= 5; ++i) {
ostringstream oss;
oss << name << i << fmt;
string filename = oss.str();
...
}

или так:
...
string name = "test";
string fmt = ".txt";
for(int i = 1; i <= 5; ++i) {
string filename = name + char(i + '0') + fmt;
...
}

Но только для i: 0 <= i <= 9
Александр Косяк
Александр Косяк
85 941
Лучший ответ
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main() {
string filename("test");
string extension(".txt");
string path("");
for (int i = 1; i <= 5; ++i) {
path = filename + to_string(i) + extension;
ifstream stream(path.c_str());
// TODO:
}
cin.sync();
cin.get();
}
***алик*** *шамои*
***алик*** *шамои*
61 401
а чему file равна то?
Дядя Рося
Дядя Рося
88 866
Я бы не использовал дорогостоящие операции "склеивания" строк в таком случае. а по-старинке. Зато гораздо быстрее чем что-либо =)

#include <iostream>

using namespace std;

#define FNAME "test"
#define FEXT ".txt"
//Чуть помогаем компилятору
const int FNAME_S = sizeof(FNAME);

int main()
{
char buf[FNAME_S+sizeof(FEXT)] = {FNAME "0" FEXT};
for(int i=0;i<5;i++) {
buf[FNAME_S-1] = '1' + i;
cout << buf << endl;
}
return 0;
}

Ну или если string использовать:
вместо char buf
string buf = FNAME "0" FEXT;
Vlad Shalaumov
Vlad Shalaumov
84 764
Можно ещё так:

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int main()
{
string filename = "input";
string format = ".txt";
char* buffer;
for (int i = 0; i < 5; i++) {
itoa(i,buffer,10);
ifstream is(filename + string(buffer) +format);
is.close();
}
return 0;
}

или так (стандарт C++11)

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int main()
{
string filename = "input";
string format = ".txt";
for (int i = 0; i < 5; i++) {
ifstream is(filename + to_string(i) +format);
is.close();
}
return 0;
}