move shii
This commit is contained in:
@@ -1,3 +1,72 @@
|
|||||||
//
|
// Task 12 (Ubuntu): replace every char equal to the first char of its line with a space.
|
||||||
// Created by pajjilykk on 10/1/25.
|
// Usage: ./task12 <input_file> → writes "<input_file>.out" and prints replacement count.
|
||||||
//
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <string>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
// True if file exists (POSIX stat)
|
||||||
|
static bool file_exists(const std::string &path) {
|
||||||
|
struct stat st{};
|
||||||
|
return ::stat(path.c_str(), &st) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// "<name>.out" by replacing last extension or appending if none
|
||||||
|
static std::string make_out_name(const std::string &in) {
|
||||||
|
std::size_t pos = in.find_last_of('.');
|
||||||
|
if (pos == std::string::npos) return in + ".out";
|
||||||
|
return in.substr(0, pos) + ".out";
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
if (argc != 2) {
|
||||||
|
std::cerr << "Usage: " << argv[0] << " <input_file>\n";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string in_path = argv[1];
|
||||||
|
if (!file_exists(in_path)) {
|
||||||
|
std::cerr << "Error: input file does not exist.\n";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ifstream in(in_path);
|
||||||
|
if (!in) {
|
||||||
|
std::cerr << "Error: cannot open input file.\n";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string out_path = make_out_name(in_path);
|
||||||
|
std::ofstream out(out_path);
|
||||||
|
if (!out) {
|
||||||
|
std::cerr << "Error: cannot create output file.\n";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
long long replacements = 0;
|
||||||
|
std::string line;
|
||||||
|
|
||||||
|
while (std::getline(in, line)) {
|
||||||
|
if (!line.empty()) {
|
||||||
|
char first = line.front();
|
||||||
|
for (char &c: line) {
|
||||||
|
if (c == first) {
|
||||||
|
if (c != ' ') {
|
||||||
|
c = ' ';
|
||||||
|
++replacements;
|
||||||
|
} // count only real changes
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out << line;
|
||||||
|
if (!in.eof()) out << '\n';
|
||||||
|
if (!out) {
|
||||||
|
std::cerr << "Error: write error.\n";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << replacements << std::endl;
|
||||||
|
return static_cast<int>(replacements);
|
||||||
|
}
|
||||||
|
|||||||
1
lab_1/compile.sh
Executable file
1
lab_1/compile.sh
Executable file
@@ -0,0 +1 @@
|
|||||||
|
g++ -std=c++17 -O2 -Wall -Wextra 12_first_symbols_to_spaces.cpp -o 12_first_symbols_to_spaces
|
||||||
8
lab_1/file.in
Normal file
8
lab_1/file.in
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
abcabcABC
|
||||||
|
Aaaaaa
|
||||||
|
1112233111
|
||||||
|
,,,,.,,
|
||||||
|
leading spaces here
|
||||||
|
tab leading here
|
||||||
|
first-letter f repeats: f fff f-f_f
|
||||||
|
ZzzZzZ
|
||||||
1
lab_1/run.sh
Executable file
1
lab_1/run.sh
Executable file
@@ -0,0 +1 @@
|
|||||||
|
./12_first_symbols_to_spaces file.in
|
||||||
Reference in New Issue
Block a user