fix shii
This commit is contained in:
1
others/vlad`s/lab1/compile.sh
Executable file
1
others/vlad`s/lab1/compile.sh
Executable file
@@ -0,0 +1 @@
|
||||
g++ task11.cpp -o task11
|
||||
13
others/vlad`s/lab1/file.in
Normal file
13
others/vlad`s/lab1/file.in
Normal file
@@ -0,0 +1,13 @@
|
||||
aabbcc
|
||||
bookkeeper
|
||||
Mississippi
|
||||
x
|
||||
aa
|
||||
aba
|
||||
aaa
|
||||
baaa
|
||||
aaab
|
||||
abba
|
||||
1222333
|
||||
(four spaces)
|
||||
--====
|
||||
71
others/vlad`s/lab1/task11.cpp
Normal file
71
others/vlad`s/lab1/task11.cpp
Normal file
@@ -0,0 +1,71 @@
|
||||
// Task 11: In every pair of identical adjacent characters, replace the second with a space.
|
||||
// Usage: ./task11 <input_file> -> writes "<name>.out" and prints replacements count.
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <sys/stat.h>
|
||||
|
||||
static bool file_exists(const std::string &path) {
|
||||
struct stat st{};
|
||||
return ::stat(path.c_str(), &st) == 0;
|
||||
}
|
||||
|
||||
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()) {
|
||||
for (std::size_t i = 1; i < line.size(); ++i) {
|
||||
if (line[i] == line[i - 1]) {
|
||||
if (line[i] != ' ') {
|
||||
line[i] = ' ';
|
||||
++replacements;
|
||||
}
|
||||
// Move to next position; overlapping pairs like "aaa":
|
||||
// i at 2 will compare line[2] with line[1] (now space) → no double count.
|
||||
}
|
||||
}
|
||||
}
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user