Программирование. Принципы и практика использования C++ Исправленное издание, стр. 36
a = a+"delta"; // переменная a принимает значение a+"delta" // (т.е. "betadelta")
• Инициализация (присваивание переменной ее начального значения).
• Присваивание (запись в переменную нового значения).
Эти операции настолько похожи, что в языке С++ для них используется одно и то же обозначение.
int y = 8; // инициализация переменной y значением 8x = 9; // присваивание числа 9 переменной xstring t = "howdy!"; // инициализация переменной t значением "howdy!"s = "G'day"; // присваивание переменной s значения "G’day" Однако с логической точки зрения присваивание и инициализация различаются. Например, инициализация всегда происходит одновременно с определением типа (например,
intstring3.5.1. Пример: выявление повторяющихся слов
Присваивание необходимо, когда нам требуется записать в объект новое значение. Если подумать, то станет совершенно ясно, что присваивание является особенно полезным, когда приходится повторять операции несколько раз. Присваивание необходимо, когда требуется повторить операцию с новым значением. Рассмотрим небольшую программу, выявляющую повторяющиеся слова в предложении. Такие программы являются частью большинства инструментов для проверки грамматики.
int main(){ string previous = " "; // переменная previous; // инициализована "не словом" string current; // текущее слово while (cin>>current) { // считываем поток слов if (previous == current) // проверяем, совпадает ли // слово с предыдущим cout << " повторяющееся слово: " << current << '\n'; previous = current; }}Эту программу нельзя назвать очень полезной, поскольку она не способна указать, в каком именно месте стоит повторяющееся слово, но этого для нас пока достаточно. Рассмотрим эту программу строка за строкой.
string current; // текущее словоЭто строковая переменная, в которую мы сразу же считываем текущее (т.е. только что прочитанное) слово с помощью оператора
while (cin>>current)
whilewhilecin>>currentcin>>currentcin>>currentНапомним, что для типа
stringИтак, мы должны считать текущее слово из потока ввода и сравнить его с предыдущим словом (уже хранящимся в памяти). Если они окажутся одинаковыми, мы сообщим об этом.
if (previous == current) // проверяем, совпадает ли слово // с предыдущим cout << " повторяющееся слово: " << current << '\n';Теперь мы должны повторить описанную операцию. Для этого копируем значение переменной
currentpreviousprevious = current;Эта инструкция учитывает все возможные ситуации, кроме начальной. Что делать с первым словом, у которого нет предыдущего, с которым его следовало бы сравнивать? Эта проблема решается с помощью следующего определения переменной
<b>previous</b>string previous = " "; // переменная previous; инициализована // "не словом"Строка состоит из одного символа (пробела, который вводится путем нажатия клавиши пробела). Оператор ввода
>>whileif (previous == current)