Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
roonmax
0 / 0 / 0
Регистрация: 10.03.2012
Сообщений: 46
#1

Комментировать строки программы.

18.05.2012, 19:06. Просмотров 597. Ответов 2
Метки нет (Все метки)

обьясните пожалуйста что каждая из строк обозначает!!!!

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void print_last_folder(const char * fileName) {
    char *lastSlash = strrchr(fileName, '\\');
    char *prevSlash = lastSlash;
    if (lastSlash && lastSlash != fileName) {
        prevSlash--;
        while (prevSlash >= fileName && *prevSlash != '\\')
            prevSlash--;
        while (prevSlash != lastSlash - 1)
            putchar(*++prevSlash);
    }
    else
        printf("\\");
}
 
int main(int argc, char** argv) {
    print_last_folder("E:\\Temp\\1.txt");
    putchar('\n');
    print_last_folder("E:\\1.txt");
    putchar('\n');
    print_last_folder("\\1.txt");
    putchar('\n');
    print_last_folder("1\\1.txt");
    putchar('\n');
    return (EXIT_SUCCESS);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2012, 19:06
Ответы с готовыми решениями:

За комментировать программу строки
Нужно за комментировать программу: #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;stdlib.h&gt;...

Строки. Изменение произвольной строки по ходу программы
Есть произвольная строка char s=&quot;Hello world&quot; по ходу программы нам нужно изменить...

Объясните строки программы
Взято из контекста библиотеки stdio.h, объясните пожалуйста каждую строку, за что каждая отвечает?...

Объяснить(прокомментировать)строки программы
Написать генератор псевдослучайных чисел по алгоритму f = (f + f + f) %...

Использование внешней программы для обработки строки
Требуется с запустить внешнюю программу, передав в нее строку из файла и получив обратно результат...

2
MrCold
861 / 759 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
19.05.2012, 01:21 #2
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
//   ПРОГРАММА СЧИТЫВАЕТ ИМЯ КАТАЛОГА В КОТОРОМ НАХОДИТСЯ ФАЙЛ  (ПОСЛЕДНЮЮ ПАПКУ)
 
void print_last_folder(const char * fileName) {
    char *lastSlash = strrchr(fileName, '\\');  // УКАЗАТЕЛЬ НА ПОСЛЕДНИЙ  СЛЭШ  (ПОЛУЧИЛИ АДРЕС (УЗНАЛИ "ПОЗИЦИЮ") )
    char *prevSlash = lastSlash;        // ПРИСВОИЛИ ПОЛУЧЕННЫЙ АДРЕС  ВТОРОМУ УКАЗАТЕЛЮ
    if (lastSlash && lastSlash != fileName) {   // ЕСЛИ В ИМЕНИ  ФАЙЛА ЕСТЬ  СЛЗШ И ОН НЕ В НАЧАЛЕ СТРОКИ
            prevSlash--;   // СДВИГАЕМСЯ К НАЧАЛУ СТРОКИ  НА -1
        while (prevSlash >= fileName && *prevSlash != '\\')    // ПОКА ЕСТЬ КУДА ДВИГАТЬСЯ ИЛИ ПОКА НЕ УПРЁМСЯ В СИМВОЛ  СЛЭШ
            prevSlash--;  // ДВИГАЕМСЯ  К НАЧАЛУ СТРОКИ
        while (prevSlash != lastSlash - 1) // -1  ЧТОБЫ НЕ НАПЕЧАТАТЬ  СЛЭШ  ( ДВИГАЕМСЯ ВПРАВО ДО УПОРА В УКАЗАТЕЛЬ НА ПОСЛЕДНИЙ СЛЭШ - 1 )
            putchar(*++prevSlash);  // ПЕЧАТАЕМ ИМЯ КАТАЛОГА
    }
    else
        printf("\\");       //ИНАЧЕ ПЕЧАТАЕМ СЛЭШ
}
 
int main(int argc, char** argv) {
    print_last_folder("E:\\Temp\\1.txt");   // ВЫЗОВ ФУНКЦИИ
    putchar('\n');    // ПЕРЕВОД НА СЛЕД.СТРОКУ
    print_last_folder("E:\\1.txt");
    putchar('\n');
    print_last_folder("\\1.txt");
    putchar('\n');
    print_last_folder("1\\1.txt");
    putchar('\n');
    return (EXIT_SUCCESS);
}
0
СашаН
269 / 269 / 144
Регистрация: 15.03.2012
Сообщений: 598
Записей в блоге: 1
19.05.2012, 02:55 #3
Как я вижу, тебе нужно только знать как работает функцыя "print_last_folder()".

Первым делом рассмотрим функцыю strrchr() из <string.h>.
Её прототип выглядит примерно так:
C
1
char *strrchr(const char *ourString, int ourChar);
Эта функцыя возвращает указатель на последнее вхождение символа "ourChar" в
строке "ourString". Если такового нету, тогда возвращается NULL.
На пример:
C
1
strrchr("Nanana", 'n');
возвратит указатель на "Nanana".


Теперь рассмотрим функцыю print_last_folder*().
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void print_last_folder(const char *fileName) {
        /* Аргументом для функцыи передаётся указатель на символ
         * то есть на первый символ из строки fileName. */
   char *lastSlash = strrchr(fileName, '\\');
        /* Обявляется указатель и в него записывается результат обработки strrchr().
         * Между прочим, это действительно последний слеш в строке, если он есть. */
   char *prevSlash = lastSlash;
        /* Обявляется указатель (предпоследний слеш) и в него записывается
         * адрес последнего. */
 
/* if проверяет, есть ли в указателе lastSlash какойнибуть адрес и не стоит ли
 * последний слеш в самом начале строки. 
 *******************************************************/   
   if (lastSlash && lastSlash != fileName) {
      prevSlash--;
        /* указатель prevSlash указывает теперь на один символ ближе
         * к началу строки. */
 
/* Первый цыкл while повторяется пока prevSlash находится
 * в приделах строки filtName и пока не найден символ '\\'.
 * В каждом повторе, адрес в указателье prevSlash перемещается на
 * один символ в лево, то есть к началу строки и тем самым
 * прочосывает всю строку. */
      while(prevSlash >= fileName && *prevSlash != '\\')
         prevSlash--;
 
/* Второй цыкл while печатает символы между предпоследним и
 * последним слешам, то есть название последнего каталога.
 *********************************************************************/
      while (prevSlash != lastSlash - 1)
         putchar(*++prevSlash);
   }
 
/* Если выражение в if было не истинно, то else печатает только слеш.
 * Это значит: Файл содержится в корневом каталоге.
 ************************************************************/
   else
      printf("\\");
}
 
int main(int argc, char** argv) {
   print_last_folder("E:\\Temp\\Jupiter\\1.txt");
   putchar('\n');
   print_last_folder("E:\\1.txt");
   putchar('\n');
   print_last_folder("\\1.txt");
   putchar('\n');
   print_last_folder("1\\1.txt");
   putchar('\n');
   return (EXIT_SUCCESS);
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2012, 02:55

Разработка программы, выравнивающей строки текстового файла по центру
Разработка программы, выравнивающей строки текстового файла по центру. Программа должна...

Передача аргументов командной строки из одной программы в другую
Добрый день! Вот следующее задание Программа должна запускать тестируемую программу, передавая...

Работа со строками в памяти остается строки после выхода из программы
Суть такова программа работает при первом запуске норм , но после второго чушь какая получается ....


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

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

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