Arduino:Примеры/StringAdditionOperator

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Оператор для объединения строк друг с другом [1]

Строки можно присоединять друг к другу самыми разными способами. Эта операция называется конкатенацией, а ее результатом является исходная строка плюс другая строка (или символьный массив), которую вы к ней добавили. Оператор + позволяет объединять строку с другой строкой, со значением переменной, с символом-константой, с массивом из символов-констант или с ASCII-репрезентацией константы.

  // Добавление к строке целочисленной константы:
  stringThree =  stringOne + 123;

  // Добавление к строке константы в виде длинного целого:
  stringThree = stringOne + 123456789;

  // Добавление к строке константы в виде символа:
  stringThree =  stringOne + 'A';

  // Добавление к строке константы в виде строки:
  stringThree =  stringOne +  "abc";

  // Объединение двух строк друг с другом:
  stringThree = stringOne + stringTwo;

Кроме того оператором + можно пользоваться и для того, чтобы добавить к строке результат какой-нибудь функции, но только в том случае, если функция возвращает данные одного из типов, указанных выше. Например,

stringThree = stringOne + millis();

Этот вариант приемлем, поскольку функция millis() возвращает данные типа «длинное целое». Но можно сделать и так:

stringThree = stringOne + analogRead(A0);

...поскольку функция analogRead() возвращает целочисленные значения. Конкатенация строк может пригодиться, когда вам нужно отобразить комбинацию значений и описания этих значений одной строкой – к примеру, при последовательной передаче данных через Ethernet-соединение, при выводе информации на LCD-экран и т.д.

Внимание! Нужно быть осторожнее при объединении в одну строку разных типов данных, т.к. это может повлечь непредвиденные результаты. К примеру, результатом этого фрагмента кода:

int sensorValue = analogRead(A0); 
String stringOne = "Sensor value: ";
String stringThree = stringOne + sensorValue;
Serial.println(stringThree);

...может быть «Sensor Value: 402» (ну, или какое-нибудь другое число, считанное функцией analogRead()). Однако вот этот код:

int sensorValue = analogRead(A0); 
String stringThree = "Sensor value: " + sensorValue;
Serial.println(stringThree);

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

Или вот еще один пример инициализации, которая может повлечь ошибки:

Serial.println("I want " + analogRead(A0) + " donuts");

Эта строка кода не скомпилируется, поскольку компилятор не сможет правильно расставить приоритет операций. С другой стороны, нижеследующий код скомпилируется, но запустится не так, как ожидается:

int sensorValue = analogRead(A0); 
String stringThree = "I want " + sensorValue;
Serial.println(stringThree  + " donuts");

Он запустится неправильно по той же причине, что и раньше – строкt stringThree не присвоили начального значения перед объединением разных типов данных. Поэтому перед тем как объединять строки, инициализируйте их.

Необходимое оборудование

  • Плата Arduino;

Цепь

Для этого примера не нужно строить никакой цепи, хотя Arduino должна быть через USB подключена к компьютеру.

Arduino bb.png

Код

Вот рабочий пример разных типов конкатенации.

/*
  Добавление строк друг к другу
 
 Несколько примеров объединения строк.
 Вы также можете попробовать добавлять к строке разные типы данных, 
как показано по ссылке ниже:

 http://arduino.cc/en/Tutorial/StringAdditionOperator
 
 Создан 27 июля 2010,
 модифицирован 2 апреля 2012 Томом Иго (Tom Igoe).
  
 Этот код не защищен авторским правом. 
 */

// Объявляем три строки:
String stringOne, stringTwo, stringThree;

void setup() {
  // Инициализируем последовательную передачу данных 
  // и ждем открытия порта:
  Serial.begin(9600);
  while (!Serial) {
    ; // ждем подключения последовательного порта (нужно только для Leonardo)
  }

  stringOne = String("stringThree = ");
  stringTwo = String("this string");
  stringThree = String ();
  // Отправляем вводную часть:
  Serial.println("\n\nAdding strings together (concatenation):");
  Serial.println();
}

void loop() {
  // Добавляем к строке целочисленную константу:
  stringThree =  stringOne + 123;
  Serial.println(stringThree);    // выводим "stringThree = 123"

  // Добавляем к строке константу в виде длинного целого:
  stringThree = stringOne + 123456789;
  Serial.println(stringThree);    // выводим "You added 123456789"

  // Добавляем к строке константу в виде символа:
  stringThree =  stringOne + 'A';
  Serial.println(stringThree);    // выводим "You added A"

  // Добавляем к строке константу в виде строки:
  stringThree =  stringOne +  "abc";
  Serial.println(stringThree);    // выводим "You added abc"

  stringThree = stringOne + stringTwo;
  Serial.println(stringThree);    // выводим "You added this string"

  // Добавляем к строке целочисленную переменную:
  int sensorValue = analogRead(A0);
  stringOne = "Sensor value: ";
  stringThree = stringOne  + sensorValue;
  Serial.println(stringThree);    // выводим "Sensor Value: 401" либо вместо «402» какое-то другое значение, считанное функцией analogRead(A0)

  // Добавляем к строке переменную в виде длинного целого:
  long currentTime = millis();
  stringOne="millis() value: ";
  stringThree = stringOne + millis();
  Serial.println(stringThree);    // выводим "The millis: 345345" либо вместо «345345» какое-то другое значение от currentTime

  // пока условие верно, ничего не делаем:
  while(true);
}

См.также

  1. String object
  2. StringConstructors
  3. StringAdditionOperator
  4. StringIndexOf
  5. StringAppendOperator
  6. StringLengthTrim
  7. StringCaseChanges
  8. StringReplace
  9. StringCharacters
  10. StringStartsWithEndsWith
  11. StringComparisonOperators
  12. StringSubstring

Внешние ссылки