Kā salīdzināt Arduino virknes ar strcmp () un alternatīvām

  • strcmp() salīdzina virkni ar virkni, pamatojoties uz ASCII vērtībām.
  • Alternatīvas, piemēram, memcmp (), ļauj salīdzināt atmiņas blokus bez nulles terminatoriem.
  • Pareiza šo funkciju izmantošana optimizē projektus ar ierobežotiem resursiem.
  • Kļūdas parasti ir saistītas ar virknēm, kas nav pareizi pārtrauktas.

Arduino IDE RISC-V

Strādājot ar stīgām programmā Arduino, ir vairāki veidi, kā tās salīdzināt. Viena no visnoderīgākajām funkcijām ir strcmp (), kas pieder C standarta bibliotēkai, cstring. Šī funkcija ļauj tiešā veidā salīdzināt divas rakstzīmju virknes (virknes), atgriežot vērtību, kas norāda, vai virknes ir vienādas vai starp tām ir kāda atšķirība.

Programmā Arduino rakstzīmju virknes parasti tiek apstrādātas, izmantojot klases objektus String, lai gan ar to ir arī iespēja strādāt rakstzīmju masīvi, it īpaši, ja vēlamies optimizēt resursus vai strādāt ar zemas atmiņas kodu. Apskatīsim, kā pareizi izmantot funkciju strcmp () un citas alternatīvas, kas arī noder šajā vidē.

Kas ir strcmp() un kā tas darbojas uz Arduino?

Funkcija strcmp() Tam ir diezgan vienkārša darbība: tiek ņemtas divas rakstzīmju virknes, tās salīdzina pēc rakstzīmēm un atgriež vērtību, pamatojoties uz šo salīdzinājumu. Metode novērtē ASCII vērtības no varoņiem, kas ir svarīgi paturēt prātā. Iespējamie šī salīdzinājuma rezultāti ir šādi:

  • Ja ķēdes ir vienādas, strcmp() atgriezt 0.
  • Ja pirmajai rakstzīmei, kas atšķiras, ir zemāka ASCII vērtība pirmajā virknē, funkcija atgriezīsies negatīvs skaitlis.
  • Ja pirmās virknes nesaskaņotā rakstzīme ir lielāka, tā atgriezīsies pozitīvs skaitlis.

Praktisks funkcijas izmantošanas piemērs strcmp() ir salīdzināt divas virknes, kuras mēs ievadām vai ģenerējam, izmantojot citas funkcijas. Piemēram, mēs varam izveidot programmu, kas apkopo lietotāja datus un, salīdzinot ar saglabāto virkni, pārbauda, ​​vai informācija ir pareiza.

Būtiskas atšķirības starp strcmp() un citas funkcijas

Strādājot ar stīgām programmā Arduino, ir arī citas alternatīvas strcmp() kas vislabāk atbilst jūsu vajadzībām. Viens no tiem ir memcmp(), kas veic atmiņas līmeņa salīdzinājumu, kas ir noderīgs, ja mēs nevēlamies paļauties uz nulles terminatoru savās virknēs. Atšķirībā no strcmp(), kas paredzēts darbam ar nulles gala virknēm, memcmp() tas vienkārši salīdzina noteiktu baitu skaitu.

Apskatīsim tā pamata sintaksi:

if (memcmp(payload, "cadena", longitud) == 0) { // Ejecuta la acción}

Ņemot vērā tās elastību, tā ir ļoti noderīga iespēja, ja strādājat ar datu gabaliem vai fiksēta garuma ziņojumiem, kas jāsalīdzina pa baitam.

Konkrēti lietošanas gadījumi: reāllaika virkņu uzraudzība un salīdzināšana

Iedomājieties, ka strādājat pie projekta, kurā saņemat informāciju reāllaikā un jums tā jāsalīdzina ar noteiktu vērtību. Funkcija strcmp () Tas ir galvenais instruments šāda veida situācijās. Piemēram, ja jūs salīdzināt datus, kas saņemti no sensora, un vēlaties pārbaudīt, vai tie atbilst iepriekš noteiktai vērtībai, strcmp () ļaus jums to izdarīt efektīvi.

Šajā koda fragmentā mēs salīdzinām, vai vērtība, kas saņemta no pH sensora, atbilst noteiktām kalibrētajām vērtībām:

if (strcmp(inputString, "CAL,4") == 0) { // Acción cuando se recibe el valor de calibración}

Šāda veida salīdzināšana ir ļoti svarīga lietojumprogrammās, kurās dati var atšķirties, un mums ir jāpieņem lēmumi, pamatojoties uz rādījumu rezultātiem.

Citas metodes darbam ar stīgām

Bez tam strcmp(), varat izmantot arī citas funkcijas Arduino ekosistēmā. Funkcija compareTo, piemēram, ir daļa no klases String un atvieglo šīs klases objektu salīdzināšanu. Lai gan strcmp() Tas ir biežāk sastopams zema līmeņa implementācijās vai ar rakstzīmju masīviem, compareTo noderīga, ja jau strādājat ar objektiem String.

Šeit ir dažas papildu metodes, kuras varat izmantot:

  • salīdzināt ar (): salīdziniet divus objektus String un atgriež salīdzināšanas vērtību, kā norādīts strcmp().
  • vienāds (): pārbauda, ​​vai divi virknes objekti ir tieši vienādi, atgriežot patiesu vai nepatiesu.

Biežākās problēmas un to novēršana

Viena no visbiežāk pieļautajām kļūdām, lietojot strcmp() vietnē Arduino nepārliecinās, ka virknes ir pareizi pabeigtas ar a \0 (nulle rakstzīme). Ja virkne netiek pārtraukta pareizi, funkcija turpinās salīdzināt atmiņā, pārsniedzot gaidīto, kas var izraisīt neparedzētas kļūdas vai nepareizu darbību.

Ja jums ir aizdomas, ka jūsu virknes nav pareizi pārtrauktas, varat izmantot tādus risinājumus kā memcmp(), kas nav atkarīga no nulles, lai norobežotu virkni, un ļauj norādīt noteiktu salīdzināmo baitu skaitu.

Vēl viena problēma, ar kuru jūs varat saskarties, ir, salīdzinot virknes, kuras, iespējams, esat saņēmis, izmantojot sērijas ievadi. Pirms salīdzināšanas vienmēr noteikti notīriet un formatējiet virknes.

Pilns ieviešanas piemērs

Lai ilustrētu, kā šie rīki darbojas reālā projektā, šeit ir piemērs, kas apvieno virknes salīdzināšanu ar funkciju Serial.println() Lai parādītu rezultātus Arduino sērijas monitorā:

#include <string.h> void setup() { Serial.begin(9600); char str1[] = "Hola"; char str2[] = "Hola"; int result = strcmp(str1, str2); if (result == 0) { Serial.println("Las cadenas son iguales"); } else if (result > 0) { Serial.println("La primera cadena es mayor"); } else { Serial.println("La segunda cadena es mayor"); } } void loop() { }

Šis kods salīdzina divas virknes un parāda rezultātus monitorā. Tas ir labs praktiskās izmantošanas piemērs strcmp() reālās Arduino lietojumprogrammās, lai efektīvi salīdzinātu teksta virknes.

Papildus salīdzināšanai varat izmantot izvadi strcmp() tādās nosacītās struktūrās kā if lai veiktu noteiktas darbības, kad virknes sakrīt vai nesakrīt.

Optimizācija projektos ar ierobežotiem resursiem

Kā jūs, iespējams, jau pamanījāt, izmantošana strcmp() un līdzīgas funkcijas ir ļoti efektīva iespēja, ja mums ir projekti ar atmiņas ierobežojumiem, kas ir diezgan izplatīts Arduino projektos. Ja objektu vietā izmanto rakstzīmju masīvus String, mēs optimizējam atmiņas patēriņu, kas ir būtiski, strādājot ar mikrokontrolleriem ar mazu atmiņas ietilpību.

Visbeidzot, ir svarīgi uzsvērt, ka projektos, kuros strādājat ar sensoriem, saskarnēm vai sakaru moduļiem, ir svarīgi pārbaudīt katru saņemto informāciju, lai izvairītos no kļūdām izpildē vai nevēlamas darbības.

Viss iepriekš minētais, strcmp() Tas ir ļoti daudzpusīgs rīks, kas pielāgojas vairākiem scenārijiem, sākot no vienkāršākajiem līdz daudz sarežģītākām lietojumprogrammām, kur nepieciešams optimizēt resursus un pieņemt lēmumus, pamatojoties uz ķēdes salīdzinājumiem.


Esi pirmais, kas komentārus

Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.