Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 15.11.2022
Сообщений: 2

Работа со строками (добавление символа в нужное место, удаление вхождения символа в строку)

14.03.2023, 09:47. Показов 494. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравствуйте. При выполнении следующего кода, а именно при выполнении функций insertCharByIndex и delCharByChar строка преобразовывается из введённой, например "e123**" в следующее "e123**ННННННННННННННННННННННННННННННННН НННННННННННННННННННННННННННННННННННННННН НННННННННННННННННННННННННННННННННННННННН НННННННННННННННННННННННННННННННННННННННН НННННННННННННННННННННННННННННННННННННННН НННННННННННННННННННННННННННННННННННННННН НННННННННННННННННээээЭЭЭЭж?y?l"

При этом, delCharIndex работает нормально. Подскажите, пожалуйста, в чём дело.

Код:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <iostream>
 
using namespace std;
 
void delCharIndex(char** words, int index) { // Задание 1
    char* string = new char[256];
    int j = 0;
    for (int i = 0; i<strlen(*words); i++) {
        if (j == index)
            j++;
        string[i] = *(*words + j++);
    }
    *words = string;
}
 
void delCharByChar(char** words, char deletion) { // Задание 2
    char* string = new char[256];
    int j = 0;
    for (int i = 0; i < strlen(*words); i++) {
        if (*(*words + i) != deletion) {
            string[j++] = *(*words + i);
        }
    }
    *words = string;
}
 
void insertCharByIndex(char** words, char insertion, int index) { // Задание 3
    char* string = new char[256];
    int j = 0;
    for (int i = 0; i < strlen(*words)+1; i++) {
        if (i == index)
            string[i++] = insertion;
        string[i] = *(*words + j++);
    }
    *words = string;
}
 
void changeDot(char** words) { // Задание 4
    for (int i = 0; i<strlen(*words); i++)
        if (*(*words + i) == '.')
            *(*words + i) = '!';
}
 
int charCountIndex(char** words, char searching) { // Задание 5 
    int count = 0;
    for (int i = 0; i < strlen(*words); i++)
        if (*(*words + i) == searching)
            count++;
    return count;
}
 
void charCount(char** words) { // Задание 6
    int lettersCount = 0, figureCount = 0, otherCount = 0, chara;
    for (int i = 0; i<strlen(*words); i++) {
        chara = (int)*(*words + i);
        if (chara > 96 && chara < 123 || chara > 64 && chara < 91 || chara > -33 && chara <0 || chara > -65 && chara < -32) {
            lettersCount++;
        }
        else if (chara > 47 && chara < 58) {
            figureCount++;
        }
        else {
            otherCount++;
        }
    }
    cout << "\nКоличество цифр: " << figureCount;
    cout << "\nКоличество букв: " << lettersCount;
    cout << "\nКоличество прочих символов: " << otherCount;
}
 
int mystrcmp(const char* str1, const char* str2) {
    return 0;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int option, index;
    char symbol;
    char* words = new char[100];
    cout << "Введите строку: ";
    cin.getline(words, 100);
    while (true) {
        system("cls");
        cout << "Введённая строка: ";
        cout << words << endl;
        cout << endl;
        cout << "1 - Удалить из строки символ с заданным номером.\n";
        cout << "2 - Удалить из строки все вхождения в неё заданного символа.\n";
        cout << "3 - Вставить символ в указанную позицию строки.\n";
        cout << "4 - Заменить все точки на восклицательный знак.\n";
        cout << "5 - Посчитать cколько раз встречается искомый символ.\n";
        cout << "6 - Определить количество каждого вида символов.\n";
        cout << "0 - Выход.\n";
        cout << "\n\tВыбор: "; cin >> option;
        system("cls");
        cout << "Введённая строка: ";
        cout << words << endl;
        cout << endl;
        switch (option) {
        case 1:
            cout << "\nВведите номер символа, который необходимо удалить: "; cin >> index;
            delCharIndex(&words, index);
            break;
        case 2:
            cout << "\nВведите символ, который необходимо удалить: "; cin >> symbol;
            delCharByChar(&words, symbol);
            break;
        case 3:
            cout << "\nВведите символ, который необходимо вставить: "; cin >> symbol;
            cout << "Введите позицию: "; cin >> index;
            insertCharByIndex(&words, symbol, index);
            break;
        case 4:
            changeDot(&words);
            cout << "\nВсе точки заменены.\n";
            break;
        case 5:
            cout << "\nВведите символ для поиска и подсчёта: "; cin >> symbol;
            cout << "Символ встречается " << charCountIndex(&words, symbol) << " раз.\n";
            break;
        case 6:
            charCount(&words);
            break;
        case 0:
            exit(EXIT_SUCCESS);
        default:
            cout << "\nНекорректный ввод";
        }
        cout << "\n\tПреобразованная строка: ";
        cout << words << endl;
        cout << endl;
        system("pause");
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.03.2023, 09:47
Ответы с готовыми решениями:

Ввод строки S и символа С. Результат: число повторений символа С и порядковые позиции вхождения этого символа в строку
Нужно составить программу, в которой пользователь вводит вручную строку S и символ C. Результатом программы должно быть число повторений...

Замена символа в строке на число соответствующему номеру по порядку вхождения этого символа в строку
В заданной строке заменить каждый символ «*» числом, соответствующим номеру по порядку вхождения этого символа в строку.

Из строки получить новую, выбросив все вхождения заданного символа (Работа со строками)
Доброго времени суток =) Нужна помощь с заданием: &quot;Из заданной строки получить новую, выбросив из нее все вхождения заданного...

1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
15.03.2023, 16:58
Конец строки устанавливай.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.03.2023, 16:58
Помогаю со студенческими работами здесь

Работа со строками (удаление из строки указанного символа)
Недавно начал изучать С++ в универе. Задали написать программу реализующую удаление из строки указанного символа. Программа компилируется,...

Работа со строками: написать функцию, находящую первое вхождение символа ch в строку target
Написать ф-цию, которая находит первое вхождение символа ch в строку target. Параметр direct указывает направление поиска. Прототип: ...

На место первого символа записать код FF, на место последнего символа- старший байт первого исходного числа
Сегмент данных содержит два символьных кода. На место первого символа записать код FF, на место последнего символа- старший байт первого...

Заменить все первые левые вхождения символа “a” на 00, а все правые вхождения символа “a” на 11
Заменить все первые левые вхождения символа “a” на 00, а все правые вхождения символа “a” на 11, остальные без изменений

Дана строка символов. Заменить все вхождения символа ‘{’ на ‘begin’, а каждое вхождение символа ‘}’ – на ‘end’
3. Дана строка символов. Заменить все вхождения символа ‘{’ на ‘begin’, а каждое вхождение символа ‘}’ – на ‘end’. Добавлено через 1...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru