SHARE
TWEET

Untitled

a guest Aug 18th, 2019 85 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #include <string.h>
  5.  
  6. char* updatestr(char *str) {
  7.     char *c;
  8.     c = str;
  9.    
  10.     for(int i = 0;i < strlen(str); ++i){
  11.         if(isdigit(*c)){
  12.             *c = ((*c - '0' + 1) % 10) + '0';
  13.         }
  14.         c++;
  15.     }
  16.     return str;
  17. }
  18. // основная функция работы алгоритма №1
  19.  
  20.  
  21.  
  22. typedef struct vect{
  23.     char value; // хранение символа
  24.     struct vect *next; // указатель на следующий элемент
  25.     struct vect *prev; // указатель на предыдущий элемент
  26. } vector;
  27. // пользовательский тип данных список(нужен для алгоритма №2)
  28.  
  29.  
  30.  
  31. vector* init() {
  32.     vector *res;
  33.     res = (vector*)malloc(sizeof(vector)); // выделение  памяти
  34.     res->value='*'; // пусть корень списка изначально равен *
  35.     res->next=NULL;
  36.     res->prev=NULL;
  37.     return(res);
  38. }
  39. // выделение памяти для нового объекта, проводить аналогию с конструктором
  40.  
  41.  
  42.  
  43. vector* add(vector* root, char a) {
  44.     vector* tmp = init(); // создание нового объекта
  45.     tmp->value = a;
  46.     tmp->next = NULL;
  47.     while (root->next) {
  48.         root=root->next; // поставить указатель в конец списка
  49.     }
  50.     tmp->prev=root;
  51.     root->next=tmp; // связать новый объект со списком
  52.     return(tmp);
  53. }
  54. // добавление в конец списка root элемента a
  55.  
  56.  
  57.  
  58.  
  59.  
  60. vector* get(vector* root, int a) {
  61.    
  62.    
  63.     for(int i = 0; i <= a; i++) { // "<=" потому что нужно указывать на следующий
  64.         // объект ровно a+1 раз, так как корень содержит мусорное значение
  65.         if(root->next) root=root->next;
  66.         else return NULL;
  67.     }
  68.     return root;
  69.    
  70. }
  71.  
  72. // взятие по индексу значения, где возвращаемое значение - vector
  73.  
  74.  
  75.  
  76.  
  77. void show_vector(vector *res) {
  78.     res=res->next; // избегание мусорного значения корня
  79.     while (res->next) {
  80.         printf("%c", res->value);
  81.         res=res->next;
  82.     }
  83.     printf("%c\n", res->value); // вывод последнего элемента
  84. }
  85. // вывод всех элементов списка
  86.  
  87.  
  88.  
  89. vector* str_to_vector(char* s) {
  90.    
  91.     vector *res = init();
  92.    
  93.     for(int i = 0; i < strlen(s); i++) {
  94.         add(res, s[i]);
  95.     }
  96.    
  97.     return(res);
  98.    
  99. }
  100. // конвертация строки в пользовательский тип данных лист
  101.  
  102.  
  103.  
  104. vector* set_pointer_to_start(vector* res) {
  105.     while (res->prev) {
  106.         res=res->prev;
  107.     }
  108.    
  109.     return(res);
  110. }
  111. // функция, ставящая указатель в начало списка
  112.  
  113.  
  114. vector* update_vector(vector* st) {
  115.    
  116.  
  117.     st = st->next;
  118.     while (st->next) {
  119.         if(isdigit(st->value)) st->value = ((st->value - '0' + 1) % 10) + '0'; // увеличение цифры на единицу
  120.  
  121.         st = st->next;
  122.     }
  123.     if(isdigit(st->value)) st->value = ((st->value - '0' + 1) % 10) + '0';
  124.    
  125.     st = set_pointer_to_start(st); // ставит указатель в начальное положение
  126.     return(st);
  127. }
  128.  
  129. void run() {
  130.     char str[300];
  131.    
  132.     printf("Choose algorithm:\n1. string is array of char\n2. string is a list\n");
  133.    
  134.     int choose=0;
  135.    
  136.     scanf("%d", &choose);
  137.    
  138.     if(choose==1) {
  139.         while(scanf("%s", str)) {
  140.             printf("%s\n", updatestr(str));
  141.         }
  142.     }
  143.    
  144.     else if(choose==2) {
  145.  
  146.         while(scanf("%s", str)){
  147.             show_vector(update_vector(str_to_vector(str)));
  148.            
  149.         }
  150.        
  151.     }
  152. }
  153.  
  154.  
  155. int main() {
  156.    
  157.  
  158.     run();
  159.    
  160.     return 0;
  161. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top