Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/StringAdditionOperator

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


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

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

  1.   // Добавление к строке целочисленной константы:
  2.   stringThree =  stringOne + 123;
  3.  
  4.   // Добавление к строке константы в виде длинного целого:
  5.   stringThree = stringOne + 123456789;
  6.  
  7.   // Добавление к строке константы в виде символа:
  8.   stringThree =  stringOne + 'A';
  9.  
  10.   // Добавление к строке константы в виде строки:
  11.   stringThree =  stringOne +  "abc";
  12.  
  13.   // Объединение двух строк друг с другом:
  14.   stringThree = stringOne + stringTwo;

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

  1. stringThree = stringOne + millis();

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

  1. stringThree = stringOne + analogRead(A0);

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

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

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

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

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

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

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

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

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

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

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

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

  • Плата Arduino;

Цепь

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

Arduino bb.png

Код

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

  1. /*
  2.   Добавление строк друг к другу
  3.  
  4.  Несколько примеров объединения строк.
  5.  Вы также можете попробовать добавлять к строке разные типы данных,
  6. как показано по ссылке ниже:
  7.  
  8.  http://arduino.cc/en/Tutorial/StringAdditionOperator
  9.  
  10.  Создан 27 июля 2010,
  11.  модифицирован 2 апреля 2012 Томом Иго (Tom Igoe).
  12.  
  13.  Этот код не защищен авторским правом.
  14.  */
  15.  
  16. // Объявляем три строки:
  17. String stringOne, stringTwo, stringThree;
  18.  
  19. void setup() {
  20.   // Инициализируем последовательную передачу данных
  21.   // и ждем открытия порта:
  22.   Serial.begin(9600);
  23.   while (!Serial) {
  24.     ; // ждем подключения последовательного порта (нужно только для Leonardo)
  25.   }
  26.  
  27.   stringOne = String("stringThree = ");
  28.   stringTwo = String("this string");
  29.   stringThree = String ();
  30.   // Отправляем вводную часть:
  31.   Serial.println("\n\nAdding strings together (concatenation):");
  32.   Serial.println();
  33. }
  34.  
  35. void loop() {
  36.   // Добавляем к строке целочисленную константу:
  37.   stringThree =  stringOne + 123;
  38.   Serial.println(stringThree);    // выводим "stringThree = 123"
  39.  
  40.   // Добавляем к строке константу в виде длинного целого:
  41.   stringThree = stringOne + 123456789;
  42.   Serial.println(stringThree);    // выводим "You added 123456789"
  43.  
  44.   // Добавляем к строке константу в виде символа:
  45.   stringThree =  stringOne + 'A';
  46.   Serial.println(stringThree);    // выводим "You added A"
  47.  
  48.   // Добавляем к строке константу в виде строки:
  49.   stringThree =  stringOne +  "abc";
  50.   Serial.println(stringThree);    // выводим "You added abc"
  51.  
  52.   stringThree = stringOne + stringTwo;
  53.   Serial.println(stringThree);    // выводим "You added this string"
  54.  
  55.   // Добавляем к строке целочисленную переменную:
  56.   int sensorValue = analogRead(A0);
  57.   stringOne = "Sensor value: ";
  58.   stringThree = stringOne  + sensorValue;
  59.   Serial.println(stringThree);    // выводим "Sensor Value: 401" либо вместо «402» какое-то другое значение, считанное функцией analogRead(A0)
  60.  
  61.   // Добавляем к строке переменную в виде длинного целого:
  62.   long currentTime = millis();
  63.   stringOne="millis() value: ";
  64.   stringThree = stringOne + millis();
  65.   Serial.println(stringThree);    // выводим "The millis: 345345" либо вместо «345345» какое-то другое значение от currentTime
  66.  
  67.   // пока условие верно, ничего не делаем:
  68.   while(true);
  69. }

См.также

  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

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

  1. Arduino - String Addition Operator