Заменить в строке некоторые символы на их кодовое обозначение - C (СИ)
Формулировка задачи:
Если исходная строка не содержит цифр (те символов с кодами 48-57 по ASCII), то она является не зашифрованной. Необходимо заменить все символы с кодами 33-99 на их двузначные кода. Символы с другими кодами выводятся без изменений.
Пример:
Введите строку:
Hello!
Вывод.
Строка не зашифрована. Шифр: 72ello33.
И наоборот, если содержит, то она является зашифрованной.
Пример:
Введите строку:
72ello33
Вывод.
Строка зашифрована. Шифр: Hello!
При невозможности дешифрации напечатать сообщение об ошибки. И указать где она.
Я написала очень мало, работает, если строка не зашифрована, и то он просто определяет и переводит все, а мне диапазон нужно задать, задаю и не получается.
Помогите пожалуйста, так понимаю, в чем заключается задача и пыталась, делала несколько недель, но ничего...
#include <stdio.h> #include <conio.h> #include <string.h> #include <windows.h> void main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); char *st1 = "'1','2','3','4','5','6','7','8','9','0'"; char str[30]; int i,l; printf ("Первая строка: %s",st1); printf("\n Введите строку: "); scanf("%s",&str); char *fi=strpbrk(str,st1); if (fi!=NULL) { printf("Cтрока зашифрована. Шифр:"); l=strlen(str); for(i=0;i<=l;i++) { if ((str[i])<=33 && (str[i])>=99) str[i]=str[i]-32; printf("%c",str[i]); } return 0; } else printf ("Строка не зашифрована. Шифр:"); l=strlen(str); for(i=0;i<=l;i++) { if ((str[i])<=33 && (str[i])>=99) str[i]=str[i]-32; printf("%d ",str[i]); } getch(); return 0; }
Решение задачи: «Заменить в строке некоторые символы на их кодовое обозначение»
textual
Листинг программы
#include <stdio.h> #include <conio.h> #include <string.h> #include <windows.h> int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); char str[30],str2[60]; printf("\n Введите строку: "); scanf("%s",&str); int i; int contains=0; for (i=0; i<strlen(str); i++) { if (str[i]>='0' && str[i]<='9') { contains=1; break; } } printf ("\n Строка "); printf ("%s",(contains?"":"не")); printf (" зашифрована "); str2[0]='\0'; char buf[3]; int len = strlen(str); if (contains) { i=0; while (i<len) { int code=0; if (str[i]>='0' && str[i]<='9') { if (i<len-1) { if (str[i+1]>='0' && str[i+1]<='9') { strncpy (buf,&str[i],2); buf[2]='\0'; sscanf (buf,"%d",&code); if (code>=33 && code<=99) sprintf (buf,"%c",code); } } } if (!code) { buf[0]=str[i]; buf[1]='\0'; } else i++; strcat (str2,buf); i++; } printf ("\n Исходная строка: %s",str2); } else { for (i=0; i<len; i++) { if (str[i]>=33 && str[i]<=99) sprintf (buf,"%2d",str[i]); else { buf[0]=str[i]; buf[1]='\0'; } strcat(str2,buf); } printf ("\n Шифр: %s",str2); } fflush (stdin); getch(); return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с консолью, строками и числами.
- Установка кодировки консоли в UTF-8.
- Объявление двух буферов для хранения строк (str и str2) и сообщение пользователю о вводе строки.
- Считывание строки с помощью функции scanf.
- Объявление переменной contains для отслеживания наличия цифр в строке.
- Проверка каждого символа строки на наличие в диапазоне от '0' до '9'.
- Если в строке найдены цифры, то переменная contains устанавливается в 1 и цикл прерывается.
- Вывод сообщения о том, зашифрована ли строка.
- Обнуление первого символа в str2.
- Создание буфера buf для хранения числового кода символа.
- Если в строке найдены цифры, то начинается цикл, который считывает два символа, преобразует их в числовой код и добавляет этот код или сам символ в str2.
- Если в строке нет цифр, то цикл пропускается и в str2 добавляется сам символ.
- Если содержит равно 0, то выводится исходная строка.
- Если содержит не равно 0, то выводится шифр.
- Очистка буфера ввода с помощью fflush.
- Получение нажатия клавиши с помощью функции getch.
- Возврат 0, что означает успешное завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д