Заменить в строке некоторые символы на их кодовое обозначение - 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;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с консолью, строками и числами.
  2. Установка кодировки консоли в UTF-8.
  3. Объявление двух буферов для хранения строк (str и str2) и сообщение пользователю о вводе строки.
  4. Считывание строки с помощью функции scanf.
  5. Объявление переменной contains для отслеживания наличия цифр в строке.
  6. Проверка каждого символа строки на наличие в диапазоне от '0' до '9'.
  7. Если в строке найдены цифры, то переменная contains устанавливается в 1 и цикл прерывается.
  8. Вывод сообщения о том, зашифрована ли строка.
  9. Обнуление первого символа в str2.
  10. Создание буфера buf для хранения числового кода символа.
  11. Если в строке найдены цифры, то начинается цикл, который считывает два символа, преобразует их в числовой код и добавляет этот код или сам символ в str2.
  12. Если в строке нет цифр, то цикл пропускается и в str2 добавляется сам символ.
  13. Если содержит равно 0, то выводится исходная строка.
  14. Если содержит не равно 0, то выводится шифр.
  15. Очистка буфера ввода с помощью fflush.
  16. Получение нажатия клавиши с помощью функции getch.
  17. Возврат 0, что означает успешное завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.571 из 5
Похожие ответы