Вставить 3 звездочки после каждой цифры в строке - C (СИ)
Формулировка задачи:
Условие задачи: вводить строки, завершение ввода - строка end. Затем в строках добавить *** после каждой цифры и в конце добавить текст "stars were added". Исходные и переделанные строки вывести таблицей.
Я набросал такой код, но тут даже не работает остановка ввода после end. Массив str_chg - для обработанных строк.
#include <stdio.h>
#include <locale.h>
#include <string.h>
#define max_message 100
#define max_length 100
int read_line (char str[], int n);
int main()
{
char str[max_message][max_length+1], str_chg[max_message][max_length+1];
char *result;
int i=0, j, k=0, num_string=0;
setlocale(LC_CTYPE, "rus");
printf("Вводите строки (не более 100 символов, end - завершение ввода)\n");
setlocale(LC_ALL, ".866");
for (;;){
do
{
gets (str[i]);
i++;
result=strstr(str[i], "end");
}
while (result==NULL);
}
for (j=0; j<i; j++)
printf("%-33s\n", str[j]);
return 0;
}Решение задачи: «Вставить 3 звездочки после каждой цифры в строке»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char* func(char text[]) {
char* p = text;
unsigned cnt = 0;
for (; *p; ++p) {
if (isdigit(*p)) {
cnt++;
}
}
strcpy(p + (cnt * 3), "stars were added");
for (--p; cnt; --p) {
if (isdigit(*p)) {
strncpy(p + (--cnt * 3) + 1, "***", 3);
}
*(p + (cnt * 3)) = *p;
}
return text;
}
int main() {
char text[256] = "1+2=3";
printf("%s\n", text);
printf("%s\n", func(text));
return 0;
}
Объяснение кода листинга программы
В данном коде реализована функция, которая добавляет 3 звездочки после каждой цифры в строке.
- В начале кода определяются необходимые заголовочные файлы и прототип функции.
- Внутри функции первым делом инициализируется указатель
pна первый символ входной строки и переменнаяcntравная 0. Переменнаяcntбудет использоваться для подсчета количества цифр в строке. - Далее в цикле
forпроисходит проход по каждому символу входной строки. Если текущий символ является цифрой, то увеличивается значение переменнойcnt. - После завершения цикла в памяти выделяется новая строка, в которую добавляются звездочки после каждой цифры. Строка
p + (cnt * 3)указывает на позицию, с которой начинается добавление звездочек. - Затем в цикле
for(счетчикcntуменьшается на единицу на каждой итерации) происходит проход по каждому символу входной строки. Если текущий символ является цифрой, то добавляются 3 звездочки после него. - После завершения цикла возвращается исходная строка.
- В функции
mainсоздается тестовая строка1+2=3. - Выводится исходная строка.
- Вызывается функция
func, в которую передается тестовая строка. - Выводится результат работы функции
func. - Программа завершается.