0 / 0 / 0
Регистрация: 20.02.2024
Сообщений: 4

Заменить символ на его номер позиции

18.04.2024, 11:46. Показов 3476. Ответов 47

Студворк — интернет-сервис помощи студентам
Заменить все символы "@" на его номер позиции в строке char str_in[] = "12?3@kdhf@ks&jhf@@sdfsdf? "
Вывести эту строку как str_out.
Написать количество замен. Не использовать string
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.04.2024, 11:46
Ответы с готовыми решениями:

Заменить символ двоеточия на символ точки в заданной строке, начиная с указанной позиции
Правильно ли я делаю задание: Составить и протестировать функцию для замены символа двоеточие на символ точки в заданной строке, начиная...

Если символ Д встречается в массиве чаще чем символ к то заменить его на символ +
Помогите пожалуйста написать задачу Если символ Д встречается в массиве чаще чем символ к то заменить его на символ +

Ввести символ с клавиатуры. Найти символ в исходной последовательности и сосчитать его порядковый номер
Приветствую вас. Очень нужна помощь. Нужно ввести символ с клавиатуры. Найти символ в исходной последовательности и сосчитать его...

47
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
18.04.2024, 15:06
Студворк — интернет-сервис помощи студентам
Наталья8, критикуй
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <sstream>
 
int main() {
    char str_in[] = "12?3@kdhf@ks&jhf@@sdfsdf? ";
    char str_out[256];
    std::stringstream t;
    int i=0;
    
    while(str_in[i]!='\0'){     
        if(str_in[i]!='@') t<<str_in[i];
        if(str_in[i]=='@')  t<<i+1;        
        i++;
    }
    t>>str_out;
    std::cout<<str_out;
    return 0;
}
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
18.04.2024, 15:33
Цитата Сообщение от повар1 Посмотреть сообщение
критикуй
Зачем ?
Если не стеснятся в средствах то задача банальная.
Я саморазвитием, игнорируя подобные задачи научился в десятки раз больше чем по методичкам, и в платном спец заведении.
Что уж говорить про школьный или вузовский курсы.
Это большое заблуждение что нужно учится хардкодить.
2
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
18.04.2024, 15:34
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <sstream>
 
int main() {
    char str_in[] = "12?3@kdhf@ks&jhf@@sdfsdf? ";
    char str_out[256];
    std::stringstream t;
    int i=0;
    
    while(str_in[i])    str_in[i]!='@' ? t<<str_in[i++] :  t<<++i;        
    t>>str_out;
    std::cout<<str_out;
    return 0;
}
2
 Аватар для vlisp
1071 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,443
18.04.2024, 15:39
Цитата Сообщение от Наталья8 Посмотреть сообщение
Всё остальное у вас си....
все остальное у меня уместилось в 3, еще 4, чтоб создать строку из потока и вывести ее в консоль

Ну, это же ЭЛЕМЕНТАРНЫЕ вещи...
0
 Аватар для Наталья8
638 / 396 / 67
Регистрация: 09.03.2016
Сообщений: 4,342
18.04.2024, 15:45
Сложно...
Всегда путаюсь в таком гавне.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#pragma warning(disable:4996)
 
int main()
{
    char str_in[] = "12?3@kdhf@ks&jhf@@sdfsdf? ";
    
    int len{ (int)strlen(str_in) };
    char *buffer = (char*)realloc(NULL, len);
memset(buffer,0, strlen(str_in));
    int ln_cnt{};
while (ln_cnt < strlen(str_in))
    {
if (str_in[ln_cnt] == '@') {
            
char num[10];
    sprintf(num, "%d", ln_cnt);
    len += strlen(num);
buffer = (char*)realloc(buffer, len);
memset((buffer + strlen(buffer)), '\0', len- strlen(buffer));
    strncat(buffer, num, strlen(num));
    } else strncat(buffer, str_in+ln_cnt, 1);
++ln_cnt;
    }
    std::printf("%s", buffer);
    buffer = (char*)realloc(buffer, 1);// Почему то ноль поставить не разрешает....
getchar();
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от Наталья8 Посмотреть сообщение
memset((b
Не делать memset ?
А вдруг там ноль попадёться....
(Ну да... Проверил. breakpoint получаеться)

Добавлено через 3 минуты
Цитата Сообщение от повар1 Посмотреть сообщение
Наталья8, критикуй
Ну да... норм.
std::stringstream мы и забыли....
0
 Аватар для vlisp
1071 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,443
18.04.2024, 15:50
Наталья8, у тебя нечитаемая каша
в этом даже разбираться нет смысла. Тебе повар1 все на блюдечке преподнес, единственное замечание, куда он все это насыпал. нужно было не в массив, а в строку.
куда уж проще?
как назвать программистов, которые игнорируют достижения других программистов. все эти тонны библиотек, над которыми корпели ночами и днями сотни не самых глупых людей. Плюс все обсуждалось не единожды, отшлифовылось десятилетиями. и ради чего? собственного невнятного велосипеда "кода".
0
 Аватар для Наталья8
638 / 396 / 67
Регистрация: 09.03.2016
Сообщений: 4,342
18.04.2024, 16:33
Цитата Сообщение от vlisp Посмотреть сообщение
нечитаемая каша
Вы эксперт?
Я бы не сказал.................................. ....
Это использование realloc.
Память я экономлю... Для ясности... Для больших профессионалов....
Вы все его упорно / профессионально игнорируете.
Если вы не хотите програмировать, что вы здесь делаете?
Кстати, если к realloc добавить пару двоеточий, и std, то это будет c++

Добавлено через 8 минут
Цитата Сообщение от vlisp Посмотреть сообщение
игнорируют достижения других программистов
А чем я это написал? Не достижениями?
0
 Аватар для Наталья8
638 / 396 / 67
Регистрация: 09.03.2016
Сообщений: 4,342
18.04.2024, 16:38
0
459 / 246 / 15
Регистрация: 29.10.2014
Сообщений: 1,084
18.04.2024, 16:48
Цитата Сообщение от Stas3000 Посмотреть сообщение
Заменить все символы "@" на его номер позиции в строке char str_in[]
Это значит создать новый статический массив. Длина статического массива должна быть известна во время компиляции, ее нельзя вычислять в процессе выполнения. Стоит изменить условие (вставить другой исходный статический массив) - и любое решение может потенциально привести к неверному итогу.
0
 Аватар для Наталья8
638 / 396 / 67
Регистрация: 09.03.2016
Сообщений: 4,342
18.04.2024, 16:48
C++
1
2
3
4
5
6
7
8
char *buffer = (char*)realloc(NULL, len);// Выделение памяти и обнуление памяти.
memset(buffer,0, strlen(str_in));
//=========================
buffer = (char*)realloc(buffer, len);// Увеличение памяти на размер числа.
memset((buffer + strlen(buffer)), '\0', len- strlen(buffer));
//=========================
std::printf("%s", buffer);// Вывод результата и прикрыть память.
    buffer = (char*)realloc(buffer, 1);
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
18.04.2024, 16:51
Цитата Сообщение от Наталья8 Посмотреть сообщение
Вы все его упорно / профессионально игнорируете.
Потому что мы знаем что ловить блох в С++ - неблагодарная затея.
Кроме того, использование new, не означает что не будет вызван realloc или его аналог.
Просттыми тестами это можно проверить.

Добавлено через 1 минуту
Наталья8, плюс ко всему у С++ есть возможность писать безопасный код, без утечек памяти.
Что используя Си стайл сделать практически невозможно или очень затратно (как минимум по времени написании кода).
0
459 / 246 / 15
Регистрация: 29.10.2014
Сообщений: 1,084
18.04.2024, 16:52
Ну а если просто вывести на консоль, не сохраняя результата - тогда беру свои слова обратно.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
18.04.2024, 16:56
Наталья8, напомню что любое размещение в памяти, кроме placment new (standart layout типов) может вызвать сбой.
И что все новички и неопытные или просто балабольщики предлагают ? Крешить всю прогу, вместе с потерей всех наработанных данными.
Так что, се ля ви.

Добавлено через 1 минуту
Цитата Сообщение от commun Посмотреть сообщение
Ну а если просто вывести на консоль
Это уже не си стайл.
К тому же против условий задачи.
Нужна именно строка, этто может быть условием для многих задач.

Добавлено через 48 секунд
Все эти я выведу в умный стандатный С++ поток и решу вашу задачу как Си не более чем клоунада.
0
459 / 246 / 15
Регистрация: 29.10.2014
Сообщений: 1,084
18.04.2024, 17:03
Цитата Сообщение от SmallEvil Посмотреть сообщение
кроме placment new (standart layout типов)
Ну и сколько нужно потом это "delete" ?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
18.04.2024, 17:43
Цитата Сообщение от commun Посмотреть сообщение
Ну и сколько нужно потом это "delete" ?
На один new ровно один делете. Есть несколько видов типов в С++. Стандарт леяут, к которым отсносятся и все встроенные типы и не стандартно размещаемые.
Для разных типов нужен разный подход.
Что именно вас интерисует или удивляет ?
int i; // для этого типа не будет ни вызван деструктор ни освобождение памяти.
string s; // будет вызван деструктор.
string* s = new string; // необходим делете для освобождение указателя, будет вызван деструктор в процессе.
Тем не менне не обязательно вызывать деструктор в пользовательских типах со стандарт леяут.
Не нужно вызывать ни деструктор ни делете.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct A
{
  int a, b;
};
 
#include <iostream>
 
int main(){
    A a{1,2};
    std::cout << a.a << ' ' << a.b << std::endl;
    new (&a) A{3,4};
    std::cout << a.a << ' ' << a.b << std::endl;
}
Не нужно вызывать ни деструктор ни делете.

На таком уровне работы с типами, нужно различать ихнюю природу.
Универсального способа я не могу представить.
0
 Аватар для Наталья8
638 / 396 / 67
Регистрация: 09.03.2016
Сообщений: 4,342
18.04.2024, 18:08

Я его не пропагандирую.
Не насаждаю.
Просто эксперимент.
0
 Аватар для vlisp
1071 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,443
18.04.2024, 20:53
Цитата Сообщение от Наталья8 Посмотреть сообщение
Вы эксперт?
Я бы не сказал.................................. ....
а почему ник женский?
чтоб написать то же самое на си, нужно сначала пройтись по массиву и выяснить, сколько нужно добавлять к исходной длине массива. потом опять пройтись по массиву, чтоб сформировать новый массив. и еще учесть кодировки
0
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
18.04.2024, 20:58
Цитата Сообщение от vlisp Посмотреть сообщение
input_str[i] =='@'? std::cout << i : std::cout << input_str[i];
в чём сакральный смысл брать оператор, специально призванный возвращать одно из двух значений и игнорировать эту его фичу возврата значения? почему не...?
C++
1
std::cout << (input_str[i] =='@' ?  i :  input_str[i]);
ну или if () else, если не хочется работать с возвращаемыми значениями...
0
 Аватар для vlisp
1071 / 992 / 153
Регистрация: 10.08.2015
Сообщений: 5,443
18.04.2024, 21:03
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
почему не...?
а ты попробуй...
0
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
18.04.2024, 21:14
vlisp, попробовал, но онлайн компилятор не хочет корректно преобразовывать int в char, вместо этого вынуждая на это
C++
1
std::cout <<  (input_str[i] == '@' ? char(i%10+'0') : input_str[i]);
попробуй скомпилировать по-нормальному мой первый, нормальный выражение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.04.2024, 21:14

Как найти символ по его позиции?
Здравствуйте!Нужна помощь))(как обычно) Есть заданный текст(txt) и некое слово(c). Я нашла позиции букв слова с в txt с помощью INSRT,...

Как найти символ по его позиции?
Здравствуйте!Нужна помощь))(как обычно) Есть заданный текст(txt) и некое слово(c). Я нашла позиции букв слова с в txt с помощью INSRT,...

Заменить каждый символ *, встречающийся после первого его вхождения, на символ -
Дан текст. Преобразовать его следующим образом: если нет символа *, то оставить его без изменений, иначе заменить каждый символ *,...

Заменить каждый символ *, встречающийся после первого его вхождения, на символ -
Дан текст. Преобразовать его следующим *образом: если нет символа *, то оставить его *без изменений, иначе заменить каждый символ *,...

Найти последний символ «?» в строке и заменить его на символ «!»
Найти последний символ «?» в строке и заменить его на символ «!».


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru