Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
Entaro
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 23
#1

Прокомментировать код - C (СИ)

18.09.2012, 20:12. Просмотров 917. Ответов 6
Метки нет (Все метки)

здравствуйте
очень нужны комментарии в отмеченных строках кода (\\)
не могу понять что конкретно они делают
заранее спасибо
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
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
 
#define MAX 11
#define LEN 80
#define B ' '
 
char *chr2str(char *word)
{
  char *result = (char*)malloc(strlen(word)*4+3); \\
  char *ptr;
  int i = 0;
  char charF, charS, temp;
 
  ptr = word;
  i = 0;
  while(*ptr) {
    if(isalpha(*ptr)) {
      temp = toupper(*ptr)-64;
      charF = temp / 10 + 48; \\
      charS = temp % 10 + 48; \\
      result[i] = '[';
      result[++i] = charF;
      result[++i] = charS;
      result[++i] = ']';
    }
    else {
      result[i]   = *ptr;
    }
    i++;
    ptr++;
  }
  result[i] = '\0';
  
char *rptr = (char*)malloc(strlen(result) + 1);
  if(!rptr) { puts("Error: lack of memory");
              exit(1);                     }
  strcpy(rptr, result);
 
  return rptr;
}
      
void swap(char *text, char *word, int flag) \\
{
  char *ptr, *ptr2;
  ptr = strtok(text, " ");
  if (ptr) {
    if (!strcmp(ptr, word)) {
      ptr2 = chr2str(word);
      if (flag)
        printf("%c", ' ');
      printf("%s", ptr2);
      free(ptr2);
    }
    else {
      if(flag)
        printf("%c", ' ');
      printf("%s", ptr);
    }
    swap(NULL, word, 1);
  }
}
 int main(void)
{
  char text[MAX][LEN];
  char word[LEN];
  char  *pch, e[LEN];
  register int t, i;
  char *ptr;
  puts("Enter text <exit void str>.");
  for (t=0; t<MAX; t++) {
    printf("%d: ", t);
    i = 0;
    while(i<LEN) {
      text[t][i] = getchar();
      if (text[t][i]=='\n') {
        text[t][i] = '\0';
      }
      if (text[t][i]=='\0')
        break;
      i++;
    }
    if(!*text[t]) break;
  }
  printf("\nEnter word: ");
  scanf("%s", word);
  puts("");
 
  for (i=0; i<t; i++) {
    if (strstr(text[i], word) != NULL) {
      swap(text[i], word, 0);
      puts("");
    }
    else {
      if (ptr = strtok(text[i], " ")) printf("%s", ptr);
      if (ptr = strtok(NULL, " ")) {
        printf(" %s", ptr);
    printf(" <%s>", word);
              pch = strchr (*text , B ) ;
    if ( pch )
        pch = strchr ( pch + 2 , B ) ;
 
    if ( pch )
    {
        strcpy ( e, pch + 2 ) ;
        strcpy (pch+1,word);
        strcat (*text," ");
        strcat (*text,e);
    }
 
      }
      while (ptr = strtok(NULL, " ")) printf(" %s", ptr);
      puts("");
      
    }
  }
  return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2012, 20:12
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Прокомментировать код (C (СИ)):

Прокомментировать код - C (СИ)
смотрите внизу и в середине #include &quot;winsock2.h&quot; #include &quot;conio.h&quot; struct ip_header { unsigned char version; // номер версии...

Прокомментировать код - C (СИ)
#include &lt;stdio.h&gt; #define N 16 int main() { int mas, i; int sum = 0, sumArif = 0, max, min, iArif = 0; float...

Прокомментировать код - C (СИ)
Кто может комментировать после 1 scanfа до _getcha? #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; int...

Прокомментировать код - C (СИ)
Есть элементы программы на С.Обьясните что каждый элемент выполняет. Если кто может переведите элементы на Паскаль. 1. int a=5,...

Прокомментировать код - C (СИ)
Добрый день, уважаемые программисты! Не понимаю листинг на С++, а опыта с Си не имею. Что разобрал - сначала вводим размерность...

Прокомментировать код - C (СИ)
Дайте подробный комментарий: #define size 5 //число элементов в массиве, size - это имя массива? int a // объявление переменных,...

6
СашаН
268 / 268 / 86
Регистрация: 15.03.2012
Сообщений: 596
Записей в блоге: 1
19.09.2012, 00:40 #2
Привет Entaro.

Код
char *result = (char*)malloc(strlen(word)*4+3);
Резервирует память. Умножить на 4 потому что номер буквы
двухзначен, плюс две скобки. Плюс три, уже не знаю, но сойдёт и
плюс один, это для нуля ('\0').
1
Entaro
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 23
19.09.2012, 11:54  [ТС] #3
вот про *4 именно непонятно было спс
0
СашаН
268 / 268 / 86
Регистрация: 15.03.2012
Сообщений: 596
Записей в блоге: 1
19.09.2012, 12:52 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Насчёт этих трёх строчек
C
1
2
3
temp = toupper(*ptr)-64;
charF = temp / 10 + 48;
charS = temp % 10 + 48;
хотя ты только про две последние спросил.

Первым делом периводишь буквы в один регистр,
в нижний или как у нас в верхний ('А'-'Z' == 65-90). Теперь
отнимаешь от буквы 64, таким образом 'А' становится 1 итд.
В одной переменной типа char ты не можешь записать
значение "14" порядковый номер от "N", для этого тебе нужны
две перименные '1'+'4'. Поэтому последние две строчки,
их можно записать и так:
C
1
2
charF = temp / 10 + '0';
charS = temp % 10 + '0';
Наш пример:
14 / 10 = 1
1 + 48 = 49 = '1'

14 % 10 = 4
4 + 48 = 52 = '4'

При всём этом ты должен помнить что число
записанное в переменной char ассоциируется
с определённым знаком ASCII.

ЗЫ: А что тебе именно в swap() непонятно?
1
Entaro
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 23
19.09.2012, 13:12  [ТС] #5
уточнить просто хотел swap меняет местами переменные на которые указывают аргументы записанные в ней?
0
СашаН
268 / 268 / 86
Регистрация: 15.03.2012
Сообщений: 596
Записей в блоге: 1
19.09.2012, 13:54 #6
В main() делается проверка есть ли искомое слово в строке.
Если нет, то слово вставляется.
Если есть, то вызывается swap(), которая меняет слово на номера букв в ковычках.

Добавлено через 31 секунду
swap() вызывается первый раз с flag=0 и тем самым не ставит перед первым словом пробел,
после функция вызывает сама себя (рекурсивно) с flag=1, и ставит перед каждым последующим
словом в предложении (строке) пробел.
1
Entaro
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 23
19.09.2012, 15:36  [ТС] #7
спасибо в очередной раз помог
0
19.09.2012, 15:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2012, 15:36
Привет! Вот еще темы с ответами:

Прокомментировать код - C (СИ)
Есть пару вопросов по работе одной программы...они написаны в коментариях. Кто поможет и заменит эти коменты на нормальные объяснения? ...

Прокомментировать код - C (СИ)
Всем привет. Обращаюсь к Вам за помощью. Имеется 2 готовые программки, но их предназначение мне увы не известно. В этом и состоит задача!!!...

Прокомментировать код - C (СИ)
#include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;stdlib.h&gt; extern char **environ; int main(int argc, char *argv) { if...

Прокомментировать код - C (СИ)
Дорогие форумчане, помогите пожалуйста с указателями. Заранее очень благодарен. номер раз: #include &lt;iostream&gt; using...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru