Arduino:Примеры/StringComparisonOperators

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

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


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

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

if (stringOne.equals(stringTwo)) {

идентично

if (stringOne ==stringTwo) {

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

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

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

  • Плата Arduino;

Цепь

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

Код

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

String stringOne, stringTwo;

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


  stringOne = String("this");
  stringTwo = String("that");
  // Отсылаем вступительную часть:
  Serial.println("\n\nComparing Strings:");
  Serial.println();

}

void loop() {
  // Проверяем строки на идентичность:
  if (stringOne == "this") {
    Serial.println("StringOne == \"this\""); 
  }
  // Проверяем строки на неидентичность:
  if (stringOne != stringTwo) {
    Serial.println(stringOne + " =! " + stringTwo);
  }

  // Проверяем строки на неидентичность (с акцентом на регистр):
  stringOne = "This";
  stringTwo = "this";
  if (stringOne != stringTwo) {
    Serial.println(stringOne + " =! " + stringTwo);
  }
  // Идентичность строк можно проверить и при помощи функции equals():
  if (stringOne.equals(stringTwo)) {
    Serial.println(stringOne + " equals " + stringTwo);
  } 
  else {
    Serial.println(stringOne + " does not equal " + stringTwo);
  }

  // Или, возможно, вы хотите проигнорировать регистр:
  if (stringOne.equalsIgnoreCase(stringTwo)) {
    Serial.println(stringOne + " equals (ignoring case) " + stringTwo);
  } 
  else {
    Serial.println(stringOne + " does not equal (ignoring case) " + stringTwo);
  }

  // Числовая строка сравнивается с числом, которое она содержит:
  stringOne = "1";
  int numberOne = 1;
  if (stringOne.toInt() == numberOne) {
    Serial.println(stringOne + " = " + numberOne);
  }


// Сравниваем две числовые строки:
  stringOne = "2";
  stringTwo = "1";
  if (stringOne >= stringTwo) {
    Serial.println(stringOne + " >= " + stringTwo);
  }

  // Операторы сравнения могут использоваться и для сравнения строк в целях алфавитной сортировки:
  stringOne = String("Brown");
  if (stringOne < "Charles") {
    Serial.println(stringOne + " < Charles"); 
  }

  if (stringOne > "Adams") {
    Serial.println(stringOne + " > Adams"); 
  }

  if (stringOne <= "Browne") {
    Serial.println(stringOne + " <= Browne"); 
  }


  if (stringOne >= "Brow") {
    Serial.println(stringOne + " >= Brow"); 
  }

  // Функция compareTo() тоже позволяет сравнивать строки.
  // Он позволяет определить, с какого символа начинаются отличия  между строками.
  // Таким образом, если первый различный символ строки stringTwo  
  // (в данном случае – пятый)
  // с точки зрения алфавита будет более «старшим», 
  // то оператор compareTo() будет больше «0».
  stringOne = "Cucumber";
  stringTwo = "Cucuracha";
  if (stringOne.compareTo(stringTwo) < 0 ) {
    Serial.println(stringOne + " comes before " + stringTwo);
  } 
  else {
    Serial.println(stringOne + " comes after " + stringTwo);    
  }

  delay(10000);  // потому что следующая часть - цикл:

  // Кроме того, функция compareTo() удобна при сравнении числовых строк:

  while (true) {
    stringOne = "Sensor: ";
    stringTwo= "Sensor: ";

    stringOne += analogRead(A0); 
    stringTwo += analogRead(A5);

    if (stringOne.compareTo(stringTwo) < 0 ) {
      Serial.println(stringOne + " comes before " + stringTwo); 
    } 
    else {
      Serial.println(stringOne + " comes after " + stringTwo); 

    }
  }
}

См.также

  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

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