Arduino:Примеры/StringAdditionOperator: различия между версиями
Myagkij (обсуждение | вклад) Нет описания правки |
Нет описания правки |
||
Строка 7: | Строка 7: | ||
Строки можно присоединять друг к другу самыми разными способами. Эта операция называется конкатенацией, а ее результатом является исходная строка плюс другая строка (или символьный массив), которую вы к ней добавили. Оператор + позволяет объединять строку с другой строкой, со значением переменной, с символом-константой, с массивом из символов-констант или с ASCII-репрезентацией константы. | Строки можно присоединять друг к другу самыми разными способами. Эта операция называется конкатенацией, а ее результатом является исходная строка плюс другая строка (или символьный массив), которую вы к ней добавили. Оператор + позволяет объединять строку с другой строкой, со значением переменной, с символом-константой, с массивом из символов-констант или с ASCII-репрезентацией константы. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
// Добавление к строке целочисленной константы: | // Добавление к строке целочисленной константы: | ||
stringThree = stringOne + 123; | stringThree = stringOne + 123; | ||
Строка 26: | Строка 26: | ||
Кроме того оператором + можно пользоваться и для того, чтобы добавить к строке результат какой-нибудь функции, но только в том случае, если функция возвращает данные одного из типов, указанных выше. Например, | Кроме того оператором + можно пользоваться и для того, чтобы добавить к строке результат какой-нибудь функции, но только в том случае, если функция возвращает данные одного из типов, указанных выше. Например, | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
stringThree = stringOne + millis(); | stringThree = stringOne + millis(); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 32: | Строка 32: | ||
Этот вариант приемлем, поскольку функция millis() возвращает данные типа «длинное целое». Но можно сделать и так: | Этот вариант приемлем, поскольку функция millis() возвращает данные типа «длинное целое». Но можно сделать и так: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
stringThree = stringOne + analogRead(A0); | stringThree = stringOne + analogRead(A0); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 40: | Строка 40: | ||
Внимание! Нужно быть осторожнее при объединении в одну строку разных типов данных, т.к. это может повлечь непредвиденные результаты. К примеру, результатом этого фрагмента кода: | Внимание! Нужно быть осторожнее при объединении в одну строку разных типов данных, т.к. это может повлечь непредвиденные результаты. К примеру, результатом этого фрагмента кода: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
int sensorValue = analogRead(A0); | int sensorValue = analogRead(A0); | ||
String stringOne = "Sensor value: "; | String stringOne = "Sensor value: "; | ||
Строка 49: | Строка 49: | ||
...может быть «Sensor Value: 402» (ну, или какое-нибудь другое число, считанное функцией analogRead()). Однако вот этот код: | ...может быть «Sensor Value: 402» (ну, или какое-нибудь другое число, считанное функцией analogRead()). Однако вот этот код: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
int sensorValue = analogRead(A0); | int sensorValue = analogRead(A0); | ||
String stringThree = "Sensor value: " + sensorValue; | String stringThree = "Sensor value: " + sensorValue; | ||
Строка 59: | Строка 59: | ||
Или вот еще один пример инициализации, которая может повлечь ошибки: | Или вот еще один пример инициализации, которая может повлечь ошибки: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
Serial.println("I want " + analogRead(A0) + " donuts"); | Serial.println("I want " + analogRead(A0) + " donuts"); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 65: | Строка 65: | ||
Эта строка кода не скомпилируется, поскольку компилятор не сможет правильно расставить приоритет операций. С другой стороны, нижеследующий код скомпилируется, но запустится не так, как ожидается: | Эта строка кода не скомпилируется, поскольку компилятор не сможет правильно расставить приоритет операций. С другой стороны, нижеследующий код скомпилируется, но запустится не так, как ожидается: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
int sensorValue = analogRead(A0); | int sensorValue = analogRead(A0); | ||
String stringThree = "I want " + sensorValue; | String stringThree = "I want " + sensorValue; | ||
Строка 88: | Строка 88: | ||
Вот рабочий пример разных типов конкатенации. | Вот рабочий пример разных типов конкатенации. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/* | /* | ||
Добавление строк друг к другу | Добавление строк друг к другу |
Текущая версия от 18:20, 14 мая 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Оператор для объединения строк друг с другом [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 подключена к компьютеру.
Код
Вот рабочий пример разных типов конкатенации.
/*
Добавление строк друг к другу
Несколько примеров объединения строк.
Вы также можете попробовать добавлять к строке разные типы данных,
как показано по ссылке ниже:
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);
}
См.также
- String object
- StringConstructors
- StringAdditionOperator
- StringIndexOf
- StringAppendOperator
- StringLengthTrim
- StringCaseChanges
- StringReplace
- StringCharacters
- StringStartsWithEndsWith
- StringComparisonOperators
- StringSubstring
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino