Заменить '.' на многоточие
Нужно заменить в массиве символов все встречающиеся точки на многоточие, нашел как это сделать для string, но нужно для char, можете помочь понять как это сделать?
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n;
cin >> n;
char *s = new char[n];
for (int i = 0; i <= n; i++)
{
cin >> s[i];
if (s[i] == '.')
{
s.replace(i, 1, "...");
}
cout << s[i];
}
delete []s;
return 0;
}
Выводит:
14:11: error: request for member 'replace' in 's', which is of non-class type 'char*'
Ответы (1 шт):
Автор решения: Константин Николаевич Бояр II
→ Ссылка
Вообщем я думаю что проще было сделать через string, но есть вот такое решение для char с которым мне помогли.
#define UNICODE
#define _UNICODE // подключение кодировки UTF - 8 (вдруг пригодится)
#include <iostream>
#include <Windows.h>
#include <utility>
std::pair<char*, size_t> replaceDotWithThree(char* s, size_t len) // создание функции
{
using namespace std;
size_t dots = count(s, s + len, '.'); // count() сравнивает каждый элемент со значением value в диапазоне, ограниченном парой итераторов [first,last)
size_t new_len = len + dots * 2; // увеличиваем размер массива
char* res = new char[new_len];
for (size_t i = 0, j = 0; i < len; ++i) // замена '.' на '...'
{
res[j++] = s[i];
if (s[i] == '.') {
res[j++] = '.';
res[j++] = '.';
}
}
return { res, new_len };
}
int main() {
using namespace std;
// Input
size_t n;
cin >> n;
char* s = new char[n];
for (size_t i = 0; i < n; ++i) cin >> s[i]; // заполнение массива который будем расширять
// Processing
auto res = replaceDotWithThree(s, n);
// Output
cout << "\n";
char* out = res.first;
size_t new_n = res.second;
for (size_t i = 0; i < n; ++i) cout << out[i]; // вывод конечного массива
}