Arduino:Примеры/StringComparisonOperators

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

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


Строковые операторы сравнения [1]

Операторы ==, !=, > , <, >=, <=, а также функции equals() и equalsIgnoreCase() позволяют делать алфавитные сравнения между строками. Они могут пригодиться при сортировке и расстановке данных по алфавиту. Оператор == и функция equals() работают одинаковым образом. Каким именно способом пользоваться – вопрос стиля. То есть,

1 if (stringOne.equals(stringTwo)) {

идентично

1 if (stringOne ==stringTwo) {

Операторы «больше, чем» (<) и «меньше, чем» (>) сравнивают строки исходя из алфавитного порядка. При этом в строки, содержащие больше одного символа, будут сравниваться до тех пор, пока оператор не найдет первый различный символ. К примеру, «а» < «b» и «1» < «2», но в то же время «999» > «1000», потому что «9» больше чем «1».

Внимание! Строковые операторы сравнения могут сбить с толку при сравнении строк, состоящих из чисел, потому что вы (но не программа) рассматриваете их именно как числа, а не как строки. Поэтому, сравнивая числа, сравнивайте их в виде различных типов данных – int, float или long.

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

  • Плата Arduino;

Цепь

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

Arduino bb.png

Код

  1 /*
  2   Сравнение строк 
  3  
  4   Несколько примеров сравнения строк при помощи операторов сравнения
  5  
  6   Создан 27 июля 2010,
  7   модифицирован 2 апреля 2012 Томом Иго (Tom Igoe).
  8  
  9   http://arduino.cc/en/Tutorial/StringComparisonOperators
 10  
 11   Этот код не защищен авторским правом.
 12   */
 13 
 14 String stringOne, stringTwo;
 15 
 16 void setup() {
 17   // Инициализируем последовательную передачу данных и ждем открытия порта:
 18   Serial.begin(9600);
 19   while (!Serial) {
 20     ; // ждем, когда подключится последовательный порт (нужно только для Leonardo)
 21   }
 22 
 23 
 24   stringOne = String("this");
 25   stringTwo = String("that");
 26   // Отсылаем вступительную часть:
 27   Serial.println("\n\nComparing Strings:");
 28   Serial.println();
 29 
 30 }
 31 
 32 void loop() {
 33   // Проверяем строки на идентичность:
 34   if (stringOne == "this") {
 35     Serial.println("StringOne == \"this\""); 
 36   }
 37   // Проверяем строки на неидентичность:
 38   if (stringOne != stringTwo) {
 39     Serial.println(stringOne + " =! " + stringTwo);
 40   }
 41 
 42   // Проверяем строки на неидентичность (с акцентом на регистр):
 43   stringOne = "This";
 44   stringTwo = "this";
 45   if (stringOne != stringTwo) {
 46     Serial.println(stringOne + " =! " + stringTwo);
 47   }
 48   // Идентичность строк можно проверить и при помощи функции equals():
 49   if (stringOne.equals(stringTwo)) {
 50     Serial.println(stringOne + " equals " + stringTwo);
 51   } 
 52   else {
 53     Serial.println(stringOne + " does not equal " + stringTwo);
 54   }
 55 
 56   // Или, возможно, вы хотите проигнорировать регистр:
 57   if (stringOne.equalsIgnoreCase(stringTwo)) {
 58     Serial.println(stringOne + " equals (ignoring case) " + stringTwo);
 59   } 
 60   else {
 61     Serial.println(stringOne + " does not equal (ignoring case) " + stringTwo);
 62   }
 63 
 64   // Числовая строка сравнивается с числом, которое она содержит:
 65   stringOne = "1";
 66   int numberOne = 1;
 67   if (stringOne.toInt() == numberOne) {
 68     Serial.println(stringOne + " = " + numberOne);
 69   }
 70 
 71 
 72 // Сравниваем две числовые строки:
 73   stringOne = "2";
 74   stringTwo = "1";
 75   if (stringOne >= stringTwo) {
 76     Serial.println(stringOne + " >= " + stringTwo);
 77   }
 78 
 79   // Операторы сравнения могут использоваться и для сравнения строк в целях алфавитной сортировки:
 80   stringOne = String("Brown");
 81   if (stringOne < "Charles") {
 82     Serial.println(stringOne + " < Charles"); 
 83   }
 84 
 85   if (stringOne > "Adams") {
 86     Serial.println(stringOne + " > Adams"); 
 87   }
 88 
 89   if (stringOne <= "Browne") {
 90     Serial.println(stringOne + " <= Browne"); 
 91   }
 92 
 93 
 94   if (stringOne >= "Brow") {
 95     Serial.println(stringOne + " >= Brow"); 
 96   }
 97 
 98   // Функция compareTo() тоже позволяет сравнивать строки.
 99   // Он позволяет определить, с какого символа начинаются отличия  между строками.
100   // Таким образом, если первый различный символ строки stringTwo  
101   // (в данном случае – пятый)
102   // с точки зрения алфавита будет более «старшим», 
103   // то оператор compareTo() будет больше «0».
104   stringOne = "Cucumber";
105   stringTwo = "Cucuracha";
106   if (stringOne.compareTo(stringTwo) < 0 ) {
107     Serial.println(stringOne + " comes before " + stringTwo);
108   } 
109   else {
110     Serial.println(stringOne + " comes after " + stringTwo);    
111   }
112 
113   delay(10000);  // потому что следующая часть - цикл:
114 
115   // Кроме того, функция compareTo() удобна при сравнении числовых строк:
116 
117   while (true) {
118     stringOne = "Sensor: ";
119     stringTwo= "Sensor: ";
120 
121     stringOne += analogRead(A0); 
122     stringTwo += analogRead(A5);
123 
124     if (stringOne.compareTo(stringTwo) < 0 ) {
125       Serial.println(stringOne + " comes before " + stringTwo); 
126     } 
127     else {
128       Serial.println(stringOne + " comes after " + stringTwo); 
129 
130     }
131   }
132 }

См.также

  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

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