Форум программистов, компьютерный форум CyberForum.ru

Правильно ли я понимаю работу этого кода? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как представить дерево http://www.cyberforum.ru/cpp-beginners/thread612980.html
Как в с++ представить дерево состоящее из 15 вершин и трех внутренних узлов? Добавлено через 3 часа 29 минут Пожалуйста помогите!
C++ Вывод текста на экран с заданной позиции. БИЛЕТ №26 3. Недостатком оператора вывода cout<< является плохой способ форматирования текста. Так, если нужно начать вывод с тридцатой позиции нужно после стрелок написать 30 пробелов, что при программировании с применением таблиц приводит к потерям времени и появлению ошибок. Создайте функцию, с помощью которой можно выводит на экран текст с заданной позиции. Продемонстрируйте её... http://www.cyberforum.ru/cpp-beginners/thread612976.html
Функция signum(x). C++
БИЛЕТ №25 3. Запишите код функции signum(x), которая вместо числа x записывает на его место в память +1, если число положительное -1, если отрицательное и 0, если число равно 0, независимо от того является ли число x целым или дробным.
Вывести строку в обратном порядке. C++
БИЛЕТ №23 3. Напишите программу, которая позволяет ввести строку символов, и вывести ее в обратном порядке, заменяя одиночные пробелы двойными.
C++ Динамический массив из n чисел типа int. http://www.cyberforum.ru/cpp-beginners/thread612970.html
БИЛЕТ №22 3. Напишите программу, которая выполняет следующие действия: 1) определяет динамический массив из n чисел типа int; 2) позволяет выполнить ввод чисел и вывод части массива от элемента с номера n1 до элемента с номером n2 на экран.
C++ Переставить местами строки матрицы. БИЛЕТ №21 3. Дана целочисленная квадратная матрица. Переставьте местами строки матрицы в порядке возрастания первых элементов строк. подробнее

Показать сообщение отдельно
koder
3 / 3 / 0
Регистрация: 13.06.2012
Сообщений: 28
24.06.2012, 19:15     Правильно ли я понимаю работу этого кода?
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
#include <iostream>
#include <cctype>
using namespace std;
 
int main ()
{   
    char str1[80] = "Enter first string";
    char str2[80] = "Enter second string";
    char *p1, *p2;
 
    cout << "Enter first string: ";
    cin >> str1;
 
    cout << "Enter second string: ";
    cin >> str2;
 
    p1 = str1;
    p2 = str2;
 
while(*p1 && *p2) {
        if(tolower(*p1) != tolower(*p2)) break;
        else {
            p1++;
            p2++;
        }
    }
 
    if(!*p1 && !*p2)
        cout << "Strings are the same except for "
             << "possible case differences.\n";
    else
        cout << "Strings differ\n";
 
    system("pause");
    return 0;
}
Для меня важно понимать каждую мелочь, по этому опишу полностью :

Подключается заголовок iostream, который ответственный за функционирование ввода/вывода в C++.
Подключается заголовок cctype, который обеспечивает работоспособность функции tolower.
Используется пространство имен std(обеспечивающие поддержку стандартных функций).

Вызов функции запускающей программу.
Объявляется строковой массив символьного типа с размерностью 80 и именем переменной str.
Объявляется строковой массив символьного типа с размерностью 80 и именем переменной str2.
Объявляются указатели символьного типа с именами переменных *p1 и *p2.

Выводится строковой литерал с помощью оператора вывода << и ключевого слова cout(ответственного за вывод данных в консоль).
Считываются введенные данные с клавиатуры и заносятся в переменную str1 c помощью оператора вывода >> и ключевого слова cin(ответственного за считывание введенных данных с клавиатуры).

Выводится строковой литерал с помощью оператора вывода << и ключевого слова cout(ответственного за вывод данных в консоль).
Считываются введенные данные с клавиатуры и заносятся в переменную str1 c помощью оператора вывода >> и ключевого слова cin.

Переменной p1 присваивается значение строкового массива str1.(не очень понимаю почему это считается обычной переменной,если объявлялось как переменная указатель)

Переменной p1 присваивается значение строкового массива str2.

Открывается while цикл с условием в заголовке,если указатель *p1 на переменную p1 и указатель *p2 на переменную p2, возвращают ненулевое значение,а точнее если в элементе под индексом 0 строкового массива str и строкового массива str2 есть какое либо значение, то выполнить блок кода цикла.

Если значение указателя *p1 перевести в строчные символы и оно не будет равно переведенным в строчные символы значения указателя *p2 , то выполнить инструкцию выхода из цикла.
Иначе инкрементировать переменную p1 и переменную p2, а точнее в их значении увеличить индекс массива на 1 (не совсем понимаю как str[0] за счет инкремента увеличивается в str[1],то есть str[0] + str[0] будет str[1], но почему индексы слаживаются при слаживании, если в p1 находится строковой массив и по сути должно слаживаться его значение,а не он сам и индекс елемента, ведь если вывести p1,то выводится все значение массива,а если смотреть со стороны инкремента, то в p1 находится не значение массива, а str[0]).

Если значение указателя на переменную p1 и переменную p2 не ноль,то вывести строковой литерал
Иначе вывести строковой литерал.(не понимаю как именно звучит и работает оператор ! в этом контексте и видимо я неправильно это описал).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru