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[i] = "...";
}
}
delete []s;
return 0;
}
Нужно заменять символы точки в массиве на многоточие, и делать это именно с типом char
а многоточие это сколько символов?
char *s = new char[n]; for (int i = 0; i <= n; i++)
Works flawlessly
Ну а как ты себе представляешь заменить точку на многоточие?
Ну может как-то так, но тоже не получается s[i] = '.'+'.'+'.';
Смотрите, вы пришли к зубному. он вам удалил 1 зуб и на его место вставил 4.
Ну тут уже не 4 зуба, а один очень странный. Тут же просто по аски просуммируются коды точек
попробуйте s[i]='…'; (не забудьте включить юникод)
Главный вопрос-то так и не решён: многоточие — это один символ или три точки?
Если так сильно надо с массивом чаров, то почему просто не пройтись по исходной строке, посчитать количество точек n, выделить новый массив на size_of_initial_array + 2 * n + 1 элементов и по вполне очевидному алгоритмау не скопировать исходный массив в новый, не забывая добавлять дополнительные точки?
Я обычно "по-питоновски" делаю, когда думать лень: // s — std::string if (s[i] == '.') { s = s.substr(0, i) + "..." + s.substr(i + 1); i += 2; }
Опять-таки, если не сказано, в каком именно контейнере хранить строку
Та в этом и проблеиа что нужно символьный массив, а не строка
Тебе сказали, как сделать
std::string temp = givenString; ...
char* s = new char[n];
ну есть два варианта - наперёд подсчитать, сколько там точек, чтобы понимать длину результата, либо расширять динамически как вектор.
Причем первый выглядит оптимальнее с точки зрения количества полезных аллокаций Ну и этот способ тут уже предложили. Дважды
Обсуждают сегодня