Постановка задачи: В заданной строке заменить три точки, идущие подряд, тремя первыми символами строки.
Алгоритм решения: Если строка не начинается с троеточия, последовательно заменять все его вхождения.
Тесты
| Input | Output | 
| the more I code … better my coding becomes | the more I code the better my coding becomes | 
| …what am I supposed to do? | …what am I supposed to do? | 
| abc……… | abcabcabc | 
Код программы
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char* argv[]){     if(argc){   //если при вызове функции ей были переданы аргументы         unsigned i, size = 0;         for(i = 1; i < argc; i++)             size += strlen(argv[i]);          char* s = (char*) malloc(size + 1);    //выделение памяти под строку         for(i = 1; i < argc; i++)  //заполнение строки             strcat(s, argv[i]);         char replacer[3] = {s[0], s[1], s[2]};  //первые три символа строки         char *pch;      //указатель на адрес первого вхождения подстроки         //если строка содержит хотя бы одно троеточие и не начинается с него         while((pch = strstr(s, "...")) - s < strlen(s) && pch - s ≥ 3)              strncpy(pch, replacer, 3);         printf("%s\n", s);     }     return 0; } | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <iostream> #include <string> using namespace std; int main(int argc, char* argv[]){     if(argc){         string s;          for(int i = 1; i < argc; i++)             s += argv[i];         unsigned found = -1;			//позиция вхождения подстроки         string replacer = s.substr(0, 3);	//первые три символа строки         //если строка содержит хотя бы одно троеточие и не начинается с него         while((found = s.find("...")) < s.size() && found ≥ 3)             s.replace(found, 3, replacer);         cout << s << endl;     }     return 0; } | 
