c ++ выравнивание одного и того же слова в текстовом файле в разных строках / позициях по одной и той же позиции в каждой строке

Мне интересно, как пройти через текстовый файл и найти данное слово («foobar») в разных местах в каждой строке, но затем выровнять слово в той же позиции в новом текстовом файле, дайте мне знать, если это не делает смысл.

***in text file***
1 foobar baz
2  foobar baz
3   foobar baz

****out text file***
1     foobar baz
2     foobar baz
3     foobar baz

0

Решение

Манипулятор io std :: setw () from может использоваться для создания столбцов фиксированной длины в текстовом выводе, а std :: setfill () используется для указания символа заполнения:

std::cout << std::setw(5) << std::setfill('0') << 5 << std::endl;

Распечатает:

00005

Это может быть легко использовано для создания небольшой программы, которая читает все строки из одного файла и записывает их в другой файл, и в то же время выравнивает все столбцы (в приведенной ниже программе >> используется для чтения одного столбца, что означает, что столбцы в файле in предполагается разделить пробелами один или несколько пробельных символов):

#include <iostream>
#include <iomanip>
#include <vector>
#include <fstream>
#include <map>
#include <algorithm>

int main (int argc, char* arv[])
{
using namespace std;

std::vector<std::vector<std::string> > records;
std::map<int, int> column_widths;

std::ifstream in_file("infile.txt", std::ios::text);
if (!in_file.is_open())
return 1;

std::ofstream out_file("outfile.txt", std::ios::text);
if (!out_file.is_open())
return 2;

// read all the lines and columns into records
std::string line;
while (std::getline(in_file, line)) {
std::istringstream is(line);
std::vector<std::string> columns;
std::string word;
int column_index = 0;
while (is >> word) {
columns.push_back(word);
column_widths[column_index] = std::max(column_width[column_index], word.length());
++column_index;
}

records.push_back(columns);
}

// now print all the records and columns with fix widths
for (int line = 0; line < records.size(); ++line) {
const std::vector<std::string>& cols = records[line];
for (int column = 0; column < cols.size(); ++column) {
out_file << std::setw(column_widths[column])
<< std::setfill(' ')
<< cols[column] << ' ';
}
out_file << "\n";
}

return 0;
}

Я не скомпилировал программу, но она должна работать :).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]