Cum se configurează smartphone-uri și PC-uri. Portal informativ

Tipul de date șir în C. Corzi de C

Declararea șirurilor de caractere

Un șir C este o matrice unidimensională de caractere, ultimul element al căruia este un șir terminat nul (șir terminat nul).

Declararea unei variabile de tip șir în limbajul C este posibilă în trei moduri, dintre care două inițializează șirul în timpul declarației.

Prima cale:

Declarații de matrice de caractere (nu uitați să adăugați spațiu pentru nulul final):

Char s;

A doua cale:

Atribuiți o valoare inițială unei variabile șir (în acest caz, compilatorul poate calcula însuși lungimea șirului):

Char s = „Exemplu de inițializare șir”;

O constantă șir este scrisă în dreapta semnului de atribuire. Un zero ('\ 0') este adăugat automat la sfârșitul liniei. Constantele șirurilor de caractere sunt plasate într-o clasă de memorie statică.

A treia cale:

O indicație implicită că o matrice este utilizată. În stânga semnului de atribuire este un indicator către un simbol:

Char * s = „A doua opțiune de inițializare”;

Variabila s va fi un pointer către locația din RAM în care se află constanta șir. Există o potențială greșeală în această formă de notație, și anume că un indicator către un caracter este adesea numit șir. Intrarea de mai jos este doar un indicator către un caracter, deoarece nu există spațiu pentru plasarea șirului:

Char * s;

Introducerea unui șir de pe un dispozitiv de intrare standard (tastatură)

Există un set de funcții pentru lucrul cu șiruri. Pentru intrarea de la un dispozitiv de intrare standard (tastatură), funcțiile de bibliotecă din modulul de intrare-ieșire standard sunt cel mai des utilizate: scanfși devine.

Pentru a introduce un șir folosind o funcție scanf, folosește formatul « % s» , și rețineți că nu este utilizat niciun semn de adresă în fața identificatorului șirului « & » , deoarece tabloul unidimensional este deja reprezentat printr-un pointer către începutul său:

Scanf ("% s", s);

Funcţie devine () citește caractere până când ajunge la un caracter newline. Funcția acceptă toate caracterele până la caracterul de avans de linie, dar nu le include. Un zero final ('\ 0') este adăugat la sfârșitul liniei. Funcţie devine () pune o secvență de caractere citite de la tastatură într-un parametru de tip șir și returnează un pointer către acest șir (dacă operația a avut succes) sau NULL (în cazul unei erori). În exemplul de mai jos, la finalizarea cu succes a operațiunii, pe ecran vor fi afișate două linii identice:

#include int main () (char s; char * p; p = gets (s); printf ("\ n String% s introdus.", s); if (p) printf ("\ n String% s introdus.", p); returnează 0;)

În treacăt, observăm că funcția gets este adesea folosită pentru a introduce orice date de la tastatură ca șir în scopul conversiei în continuare a funcției sscanf în formatul dorit sau pentru analiza preliminară a datelor de intrare, de exemplu:

#include #include #include int main () (car s; int x, err; do (printf ("\ n Introduceți un număr întreg ->"); obține (s); err = sscanf (s, "% d", & x); if ( err ! = 1) printf ("\ n Eroare de intrare.");) While (err! = 1); printf ("\ n Întregul introdus ->% d", x); return 0;)

Ieșirea liniilor către ieșirea standard (ecranul monitorului)

Două funcții pot fi utilizate pentru a scoate șiruri de caractere la ieșirea standard (ecranul de monitorizare) printfși pune... În funcția printf, „% s” este transmis ca format. Comoditatea utilizării acestei funcții constă în faptul că, pe lângă un șir, puteți scoate imediat date de alte tipuri. Caracteristică Caracteristică pune constă în faptul că, după ieșirea liniei, trecerea la următoarea linie are loc automat.

Funcții pentru lucrul cu șiruri

Biblioteca de șiruri este furnizată pentru conversia șirurilor în limbajul C. Fiecare dintre funcții are propriul format de înregistrare (prototip).

Cele mai utilizate funcții sunt tratate în acest articol. - citit

Un exemplu de programe (listări) care lucrează cu șiruri

Programatorul spune:

Salut! Am citit articolul tau. Eram foarte trist și amuzant în același timp. Această expresie a ta este deosebit de ucigătoare: „Deoarece o variabilă de tip char este adesea folosită ca matrice, se determină numărul de valori posibile.” 😆 😆 😆
Nu râd de tine. Construirea unui site web este cu adevărat o ispravă. Vreau doar să vă susțin cu sfaturi și să subliniez câteva greșeli.

1. Valoarea unei variabile de tip char este atribuită după cum urmează:

Aici:

Car a = * „A”;

Pointerul către matrice este neadresat și, ca urmare, valoarea primului element al matricei este returnată, adică. 'A'

2. Reducerea la zero se face după cum urmează:

Car a = NULL;
char b = ();

// Și așa este șters linia din corpul programului

"" - acest caracter este numit un terminator nul. Este plasat la capătul liniei. Tu însuți, fără să știi, ai umplut matricea s1 din articolul tău cu acest simbol. Dar a fost posibil să se atribuie acest simbol numai elementului zero al matricei.

3. Simțiți-vă liber să utilizați terminologia.
Semnul = este o operație de atribuire.
Semnul * este o operațiune de înștiințare.
Mă refer la acest fragment din articol: „Totul s-a dovedit a fi atât de simplu, înainte de semnul = trebuia să pui semnul * și trebuia să declari numărul elementului (zero corespunde primului)”

Nu mă înțelege greșit, articolul așa cum este nu poate exista. Nu fi leneș, rescrie-l.
Ai o mare responsabilitate! Sunt serios. Paginile site-ului dvs. au fost incluse în prima pagină a rezultatelor căutării Yandex. Mulți oameni au început deja să repete greșeli după tine.

Noroc! Te poți descurca!

:
Știu asta de mult timp, e greu să recitesc tot timpul 200 de articole pentru a remedia ceva. Și unele tipuri nepoliticoase scriu în așa fel încât, chiar și știind ce este mai bine de remediat, nu există nicio dorință de a remedia.

Voi fi bucuros să repar și alte erori. corectați inexactitățile dacă apar. Apreciez ajutorul vostru. Mulțumesc. Știu asta de mult timp, este greu să recitesc tot timpul 200 de articole pentru a remedia ceva. Și unele tipuri nepoliticoase scriu în așa fel încât, chiar și știind ce este mai bine de remediat, nu există nicio dorință de a remedia.
Cu caracterul tău b = (); Acest lucru nu este deloc zero. ar fi verificat cel puțin b.
dacă vorbim despre caracterul nul „”; Știam foarte bine când am completat rândul cu ele și scopul a fost să arăt o curățenie reală, și nu vizibilă ochiului, pentru că rândul include gunoi, care uneori îți stau în cale. Ai fi mai atent cu termenii, „caracter cu terminație nulă” sau pur și simplu „caracter nul”, nu un terminator))) Și caracterul terminator sună foarte bine.

Modernizez articolul, dar nu voi trece la stilul altcuiva. Dacă cred că pentru un începător este mai clar așa, și nu așa cum își dorește el, atunci o voi lăsa așa. Nici tu, nu mă înțelegi greșit. Cuvântul „semn” este mult mai ușor de înțeles și de amintit pentru un începător slab decât definiția și numele fiecărui semn. Nu există absolut nicio greșeală în asta, semnul este - semnul. Mai puțin accent pe un lucru dă mai mult accent pe celălalt.

Voi fi bucuros să repar și alte erori. corectați inexactitățile dacă apar. Apreciez ajutorul vostru. Mulțumesc.

Buna din nou!
vreau sa clarific. Termenul „zero-terminator” (terminator) a fost folosit de profesorul meu de la universitate. Se pare că asta e școala veche!
Cât despre liniile de anulare.
char b = (); Aceasta este într-adevăr zero. Întreaga matrice este umplută cu zerouri. Nu crede - verifică-l!
Dacă luăm în considerare un șir în sensul său natural, cotidian, atunci „golul” va fi șirul în care nu există un singur caracter. Prin urmare, în 99,9% din cazuri, este suficient să adăugați un caracter nul. De obicei, procesarea unui șir merge până la primul caracter nul, iar caracterele care îl urmează nu mai sunt importante. Înțeleg că ai vrut să scoți la zero șirul. Tocmai am decis să ofer o versiune clasică testată în timp.

:
Când „De obicei, procesarea șirului merge până la primul caracter nul și ce caractere urmează nu mai este important” - da, șirul este resetat la zero
Dacă luăm în considerare „reducerea la zero a tuturor celulelor din șir (despre care am scris)” - nu, nu zero, și chiar și primul caracter nu este zero. Am bifat varianta asta. MinGW (CodeBlock) - întreaga matrice oferă caracterul „a”
Nu cred că acesta este un motiv de controversă.

În acest tutorial vom discuta despre șiruri în stil C, este posibil să fi văzut deja aceste rânduri pe site-ul nostru sau în orice alt tutorial. De fapt, șirurile C sunt doar matrice de caractere, dar cu specificul lor, așa că știm întotdeauna unde se află sfârșitul șirului. În acest articol ne vom uita la mai multe funcții pentru lucrul cu șiruri, de exemplu, tu - copiați, concatenați, obțineți lungimea unui șir.

Ce sunt corzile?

Rețineți că, alături de șirurile de caractere în stil C, care sunt în esență matrice simple, există și literale de șir, cum ar fi acest „literal”. În realitate, atât șirurile, cât și literalele sunt pur și simplu seturi de caractere situate unul lângă altul în memoria computerului. Dar există încă o diferență între matrice și literale, literalele nu pot fi modificate și șiruri de caractere - puteți.

Orice funcție care acceptă un șir în stil C poate lua și un literal ca parametru. Există, de asemenea, unele entități în B care pot arăta ca șiruri, când de fapt nu sunt. Vorbesc acum despre caractere, sunt cuprinse între ghilimele simple, iată un exemplu - „a”, după cum puteți vedea, acesta nu este un șir. Un caracter poate fi atribuit unui șir într-o anumită locație, dar caracterele nu pot fi procesate ca șir. Dacă vă amintiți, matricele funcționează ca indicatori, așa că dacă treceți un caracter pe șir, va fi considerat o eroare.

Din toate cele de mai sus, ar trebui să înțelegeți că șirurile sunt matrice de caractere și literalele șir sunt cuvinte înconjurate de ghilimele duble. Iată un alt exemplu de literal:

„Acesta este un șir static”

Ați uitat de specificul șirurilor care au fost menționate puțin mai sus? Deci, șirurile C trebuie întotdeauna terminate cu un caracter nul, literal „\ 0”. Prin urmare, pentru a declara un șir format din 49 de litere, trebuie să rezervați o celulă suplimentară pentru un caracter nul:

Char myString;

După cum puteți vedea din exemplu, lungimea matricei este de 50 de caractere, dintre care 49 vor lua un șir și unul, ultimul va lua un caracter nul. Este important să ne amintim că trebuie să existe întotdeauna un caracter nul la sfârșitul șirurilor C, la fel cum există un punct la sfârșitul fiecărei propoziții. Deși caracterul nul nu este afișat pe linia de ieșire, totuși ocupă spațiu de memorie. Deci, din punct de vedere tehnic, puteți stoca doar 49 de litere într-o matrice de cincizeci de elemente, deoarece ultimul caracter este necesar pentru a termina șirul. În plus, pointerii pot fi folosiți și ca șiruri. Dacă citiți articolul despre, puteți face ceva de genul:

Char * myString; // pointer de tip char myString = malloc (sizeof (* myString) * 64); // alocare de memorie

În acest exemplu, am alocat 64 de locații de memorie pentru matricea myString. Utilizați funcția liberă () pentru a elibera memoria.

Gratuit (myString);

Folosind șiruri

Șirurile sunt utile atunci când trebuie să efectuați diverse operații cu informații text. De exemplu, dacă doriți ca utilizatorul să introducă un nume în program, trebuie să utilizați un șir. Utilizarea scanf () pentru a introduce un șir funcționează, dar poate provoca o depășire a memoriei tampon. La urma urmei, șirul de intrare poate fi mai mare decât dimensiunea șirului tampon. Există mai multe modalități de a rezolva această problemă, dar cea mai ușoară modalitate este de a utiliza, care este declarată în fișierul antet .

Când citește intrarea de la utilizator, va citi toate, cu excepția ultimului caracter. După aceea, la sfârșitul liniei de citire, va plasa un terminator nul. Funcția fgets () va citi caractere până când utilizatorul apasă Enter. Să vedem un exemplu folosind fgets ():

#include int main () (char myString; // șir lung printf ("Introduceți un șir lung:"); fgets (myString, 100, stdin); // citiți un șir din fluxul de intrare printf ("Ați introdus următorul șir: % s", myString); getchar ();)

Primul parametru pentru fgets () este un șir, al doilea parametru este dimensiunea șirului, iar al treilea parametru este un pointer către fluxul de date de intrare.

Rezultatul programului:

<ВВОД>...

După cum puteți vedea, de la ieșirea programului, un caracter de nouă linie „\ n” a intrat în linia de intrare. Acest lucru s-a întâmplat din cauza faptului că fgets () a citit apăsarea butonului Enter în șirul myString și a ieșit. Aceasta înseamnă că poate fi necesar să eliminați manual caracterul nou-linie. O modalitate de a face acest lucru este prin iterația caracterului. Să modificăm programul și să eliminăm caracterul nou linie:

#include int main () (char myString; // șir lung printf ("Introduceți un șir lung:"); fgets (myString, 100, stdin); // citiți un șir din fluxul de intrare int i; for (i = 0; i< 100; i++) { if (myString[i] == "\n") { myString[i] = "\0"; break; } } printf("Вы ввели следующую строку: %s", myString); getchar(); }

Vă rugăm să rețineți că, dacă șirul de intrare conține mai puțin de 100 de caractere, atunci și caracterul de linie nouă va fi inclus în șir. Prin urmare, putem elimina acest caracter folosind o iterație simplă. Am adăugat o buclă la program în care iterăm peste caracterele șirului, rândurile 12-19... Și când întâlnim un caracter de nouă linie, îl înlocuim cu un caracter nul, linia 16... Rezultatul programului:

Introduceți linia lungă: Soarta își lasă amprenta Ați introdus următoarea linie: Soarta își lasă amprenta Apăsați pentru a închide această fereastră<ВВОД>...

Asta este tot pentru acum. În următorul articol vă voi spune despre funcții speciale pentru lucrul cu șiruri.

PS: Tuturor ne place să urmărim diferite înregistrări video, dar uneori se întâmplă să nu fie întotdeauna posibilă redarea unor formate de fișiere video. Deci, puteți rezolva această problemă folosind programul - xilisoft converter ultimate. Puteți converti rapid cu ușurință videoclipurile dintr-un format în altul. În plus, acest program poate converti și fișiere audio și imagini animate.

34

--- C # Manual --- Șiruri

În ceea ce privește programarea obișnuită, șirul tipul de date șir este una dintre cele mai importante din C #. Acest tip definește și acceptă șiruri de caractere. Într-un număr de alte limbaje de programare, un șir este o matrice de caractere. Și în C #, șirurile sunt obiecte. Prin urmare, tipul șir este un tip de referință.

Construirea șirurilor

Cel mai simplu mod de a construi un șir de caractere este să utilizați un șir literal. De exemplu, următoarea linie de cod atribuie variabilei de referință șir str referinței literale a șirului:

String str = „Șir de probă”;

În acest caz, variabila str este inițializată cu secvența de caractere „Exemplu șir”. De asemenea, puteți crea un obiect de tip șir dintr-o matrice de tip char. De exemplu:

Chararray = ("e", "x", "a", "m", "p", "l", "e"); string str = șir nou (chararray);

Odată ce un obiect de tip șir este creat, acesta poate fi folosit oriunde este necesar un șir de text citat.

Persistența șirului

În mod ciudat, conținutul unui obiect de tip șir nu poate fi modificat. Aceasta înseamnă că, odată creată, secvența de caractere nu poate fi modificată. Dar această limitare contribuie la o implementare mai eficientă a șirurilor de caractere. Prin urmare, acest dezavantaj evident, la prima vedere, se transformă de fapt într-un avantaj. Deci, dacă un șir este necesar ca o variație a unui șir existent, atunci în acest scop ar trebui creat un șir nou care să conțină toate modificările necesare. Și, deoarece obiectele șir neutilizate sunt colectate automat gunoiul, nici nu trebuie să vă faceți griji cu privire la soarta șirurilor inutile.

Trebuie subliniat, totuși, că referințele șirurilor variabile (adică obiectele de tip șir) sunt supuse modificării și, prin urmare, se pot referi la un alt obiect. Dar conținutul obiectului șir în sine nu se schimbă după ce este creat.

Să luăm în considerare un exemplu:

Static void addNewString () (șir s = „Acesta este accidentul vascular cerebral”; s = „Acesta este un accident vascular cerebral nou”;)

Să compilam aplicația și să încărcăm ansamblul rezultat în utilitarul ildasm.exe. Figura arată codul CIL care va fi generat pentru metoda void addNewString ():

Rețineți că există mai multe apeluri către codul operațional ldstr (încărcare linie). Acest opcode CIL ldstr indică încărcarea unui nou obiect șir în heap-ul gestionat. Ca rezultat, obiectul anterior care conținea valoarea „Acesta este lovitura mea” va fi în cele din urmă colectat de gunoi.

Lucrul cu șiruri

In clasa System.String este furnizat un set de metode pentru determinarea lungimii datelor de caractere, găsirea unui subșir în șirul curent, conversia caracterelor din majuscule în litere mici și invers etc. Ne vom uita la această clasă mai detaliat în continuare.

Câmp șir, indexator și proprietate

Clasa String are un singur câmp definit:

Șir public static numai pentru citire Gol;

Câmpul Gol denotă un șir gol, adică un șir care nu conține caractere. Aceasta este în contrast cu o referință String goală, care este pur și simplu făcută la un obiect inexistent.

În plus, clasa String definește un singur indexator numai pentru citire:

Public char this (get;)

Acest indexator vă permite să obțineți caracterul la indexul specificat. Indexarea șirurilor de caractere, ca și tablourile, începe de la zero. Obiectele String sunt persistente și imuabile, așa că are sens ca clasa String să accepte un indexator doar pentru citire.

În cele din urmă, clasa String definește o singură proprietate numai pentru citire:

Public int Lungime (get;)

Proprietatea Length returnează numărul de caractere dintr-un șir. Exemplul de mai jos demonstrează utilizarea unui indexator și a proprietății Length:

Utilizarea sistemului; class Exemplu (static void Main () (string str = "Șir simplu"; // Obțineți lungimea șirului și al 6-lea caracter din șir folosind indexerul Console.WriteLine ("Lungimea șirului este (0), al 6-lea caracter este" (1) "" , str.Lungime, str);))

Operatori de clasă șiruri

Clasa String supraîncarcă următorii doi operatori: == și! =. Operatorul == este folosit pentru a testa două șiruri de caractere pentru egalitate. Când operatorul == este aplicat referințelor la obiect, de obicei verifică dacă ambele referințe sunt făcute la același obiect. Și când operatorul == este aplicat referințelor la obiecte de tip String, atunci conținutul șirurilor în sine este comparat pentru egalitate. Același lucru este valabil și pentru! = Operator. Când se aplică referințe la obiecte de tip String, conținutul șirurilor în sine este comparat pentru inegalitate. În același timp, alți operatori relaționali, inclusiv =, compară referințele la obiecte de tip String în același mod ca și la obiecte de alte tipuri. Și pentru a verifica dacă un șir este mai mare decât altul, ar trebui să apelați metoda Compare (), care este definită în clasa String.

După cum va deveni clar, multe comparații de șiruri de caractere folosesc informații culturale. Dar acest lucru nu se aplică operatorilor == și! =. La urma urmei, pur și simplu compară valorile ordinale ale caracterelor din șiruri. (Cu alte cuvinte, ei compară valorile caracterelor binare care nu sunt modificate cultural, adică cultivate.) Prin urmare, acești operatori efectuează comparații de șiruri într-o manieră care nu ține seama de majuscule și de cultură.

Metode ale clasei de șiruri

Următorul tabel listează câteva dintre cele mai interesante metode ale acestei clase, grupate după scop:

Metode de lucru cu șiruri
Metodă Structură și suprasarcini Programare
Comparați șirurile
Compara () public static int Compare (șir strA, șir strB)

Public static int Compare (șir strA, șir strB, bool ignoreCase)

Public static int Compare (șir strA, șir strB, StringComparison comparisonType)

Public static int Compare (șir strA, șir strB, bool ignoreCase, cultură CultureInfo)

Metodă statică, compară șirul strA cu șirul strB. Returnează o valoare pozitivă dacă strA este mai mare decât strB; valoare negativă dacă șirul strA este mai mic decât șirul strB; și zero dacă strA și strB sunt egale. Comparația ține cont de majuscule și minuscule și sensibilă cultural.

Dacă ignoreCase este valoarea booleană adevărată, comparația ignoră diferența dintre literele mari și mici. În caz contrar, aceste diferențe sunt luate în considerare.

Parametrul comparisonType specifică o modalitate specifică de a compara șirurile. Clasa CultureInfo este definită în spațiul de nume System.Globalization.

public static int Compare (șir strA, int indexA, șir strB, int indexB, int lungime)

Public static int Compare (șir strA, int indexA, șir strB, int indexB, int lungime, bool ignoreCase)

Public static int Compare (șir strA, int indexA, șir strB, int indexB, int lungime, StringComparison comparisonType)

Public static int Compare (șir strA, int indexA, șir strB, int indexB, int lungime, bool ignoreCase, cultură CultureInfo)

Compară părți ale șirurilor strA și strB. Comparația începe cu elementele șir strA și strB și include numărul de caractere specificat de parametrul lungime. Metoda returnează o valoare pozitivă dacă partea din șirul strA este mai mare decât partea din șirul strB; valoare negativă dacă o parte din șirul strA este mai mică decât o parte din șirul strB; și zero dacă părțile comparate ale strA și strB sunt egale. Comparația ține cont de majuscule și minuscule și sensibilă cultural.

CompareOrdinal () public static int CompareOrdinal (șir strA, șir strB)

Public static int CompareOrdinal (șir strA, int indexA, șir strB, int indexB, int număr)

Face la fel ca metoda Compare (), dar ignoră setările locale

Compara cu () public int CompareTo (valoarea obiectului)

Compară șirul de apelare cu reprezentarea șir a obiectului valoare. Returnează o valoare pozitivă dacă șirul de apelare este mai mare decât valoarea șirului; valoare negativă dacă șirul de apelare este mai mic decât valoarea șirului; și zero dacă șirurile comparate sunt egale

public int CompareTo (șir strB)

Compară șirul de apelare cu șirul strB

este egal cu () public override bool Equals (obiect obj)

Returnează valoarea booleană adevărată dacă șirul de apelare conține aceeași secvență de caractere ca și reprezentarea șir a lui obj. Efectuează o comparație ordinală sensibilă la majuscule, dar insensibilă la cultură

public bool Egal (valoare șir)

Public bool Equals (valoare șir, StringComparison comparisonType)

Returnează valoarea booleană adevărată dacă șirul de apelare conține aceeași secvență de caractere ca și valoarea șirului. Se efectuează o comparație ordinală sensibilă la majuscule, dar insensibilă la cultură. Parametrul comparisonType definește o modalitate specifică de a compara șirurile

public static bool Egal (șir a, șir b)

Public static bool Egal (șir a, șir b, StringComparison comparisonType)

Returnează valoarea booleană adevărată dacă șirul a conține aceeași secvență de caractere ca și șirul b. Se efectuează o comparație ordinală sensibilă la majuscule, dar insensibilă la cultură. Parametrul comparisonType definește o modalitate specifică de a compara șirurile

Concatenează (unește) șiruri
Concat () public static string Concat (string str0, string str1);

public static string Concat (params string values);

Combină instanțe separate de șiruri într-un singur șir (concatenare)
Caută în șir
Conține () public bool Conține (valoare șir) O metodă care vă permite să determinați dacă un șir conține un anumit subșir (valoare)
Incepe cu () public bool StartsWith (valoare șir)

Public bool StartsWith (valoare șir, StringComparison comparisonType)

Returnează valoarea booleană adevărată dacă șirul de apelare începe cu valoarea subșirului. În caz contrar, valoarea booleană false este returnată. Parametrul comparisonType specifică modul în care se efectuează căutarea.

Se termină cu () public bool EndsWith (valoare șir)

Public bool EndsWith (valoare șir, StringComparison comparisonType)

Returnează valoarea booleană adevărată dacă șirul de apelare se termină cu valoarea subșirului. În caz contrar, returnează valoarea booleană false. Parametrul comparisonType specifică o anumită metodă de căutare

Index de () public int IndexOf (valoare caracter)

Public int IndexOf (valoare șir)

Găsește prima apariție a unui subșir sau caracter specificat într-un șir. Dacă caracterul sau subșirul dorit nu este găsit, atunci valoarea -1 este returnată

public int IndexOf (valoare caracter, int startIndex)

Public int IndexOf (valoare șir, int startIndex)

Public int IndexOf (valoare caracter, int startIndex, int număr)

Public int IndexOf (valoare șir, int startIndex, int număr)

Returnează indexul primei apariții a caracterului sau a valorii subșirului din șirul de apelare. Căutarea începe la elementul de la index startIndex și se întinde pe numărul de elemente identificate prin numărare (dacă este furnizat). Metoda returnează -1 dacă caracterul sau subșirul de căutare nu este găsit

LastIndexOf () Versiunile supraîncărcate sunt similare cu metoda IndexOf ().

La fel ca IndexOf, dar găsește ultima apariție a unui caracter sau subșir, nu prima

IndexOfAny () public int IndexOfAny (car anyOf)

Public int IndexOfAny (car anyOf, int startIndex)

Public int IndexOfAny (car anyOf, int startIndex, int număr)

Returnează indexul primei apariții a oricărui caracter din tabloul anyOf găsit în șirul de apelare. Căutarea începe la elementul de la index startIndex și se întinde pe numărul de elemente identificate prin numărare (dacă există). Metoda returnează -1 dacă nu se găsește nicio potrivire cu niciunul dintre caracterele din tabloul anyOf. Căutarea se efectuează în mod ordinal.

LastIndexOfAny Versiunile supraîncărcate sunt similare cu metoda IndexOfAny ().

Returnează indexul ultimei apariții a oricărui caracter din tabloul anyOf găsit în șirul de apelare

Împărțirea și concatenarea șirurilor
Despică șir public Split (params char separator)

Șir public Split (params char separator, int count)

O metodă care returnează o matrice de șiruri cu subșiruri prezente în această instanță, separate unele de altele prin elemente din matricea de șiruri de caractere specificată.

În prima formă a metodei Split (), șirul de apelare este împărțit în părțile sale componente. Ca rezultat, este returnată o matrice care conține subșirurile obținute din șirul de apelare. Caracterele care delimitează aceste subșiruri sunt trecute în tabloul separator. Dacă matricea de separare este goală sau se referă la un șir gol, atunci un spațiu este folosit ca separator de subșir. Și în a doua formă a acestei metode, este returnat numărul de subșiruri specificat de parametrul count.

șir public Split (params char separator, opțiuni StringSplitOptions)

Split șir public (separator șir, opțiuni StringSplitOptions)

Split șir public (params char separator, int count, opțiuni StringSplitOptions)

Split șir public (separator șir, număr int, opțiuni StringSplitOptions)

În primele două forme ale metodei Split (), șirul de apelare este împărțit în părți și este returnat un tablou care conține subșirurile obținute din șirul de apelare. Caracterele care separă aceste subșiruri sunt transmise în tabloul separator. Dacă matricea de separare este goală, atunci un spațiu este folosit ca separator. Și în a treia și a patra formă a acestei metode, este returnat numărul de rânduri, limitat de parametrul de numărare.

Dar, în toate formele, parametrul opțiuni indică un mod specific de a gestiona liniile goale care sunt generate atunci când doi delimitatori sunt unul lângă altul. Doar două valori sunt definite în enumerarea StringSplitOptions: Nici unulși EliminațiEmptyEntries... Dacă opțiunile este Niciuna, șirurile goale sunt incluse în rezultatul final al împărțirii șirului original. Și dacă parametrul opțiuni este setat la RemoveEmptyEntries, atunci șirurile goale sunt excluse din rezultatul final al împărțirii șirului original.

A te alatura () Join public static șir (separator șir, valoare șir)

Unire șir static public (separator șir, valoare șir, int startIndex, int număr)

Construiește un șir nou combinând conținutul unei matrice de șiruri.

Prima formă a metodei Join () returnează un șir format din subșiruri concatenate transmise în tabloul de valori. Cea de-a doua formă returnează, de asemenea, un șir format din subșirurile trecute în tabloul de valori, dar acestea sunt concatenate într-un anumit număr de contorizări, începând cu elementul de matrice de valori. În ambele forme, fiecare linie ulterioară este separată de linia anterioară printr-un separator specificat de parametrul separator.

Linii de căptușire și de tundere
Tunde () șir public Trim ()

Trim șir public (params char trimChars)

O metodă care vă permite să eliminați toate aparițiile unui anumit set de caractere de la începutul și sfârșitul liniei curente.

În prima formă a metodei Trim (), spațiile de început și de final sunt eliminate din șirul de apelare. Și a doua formă a acestei metode elimină aparițiile de început și de final din șirul de caractere care apelează din tabloul trimChars. În ambele forme, șirul rezultat este returnat.

PadStânga () șir public PadLeft (int totalWidth)

Șir public PadLeft (int totalWidth, char paddingChar)

Vă permite să completați șirul cu caractere la stânga.

Prima formă a metodei PadLeft () inserează spații în partea stângă a liniei de apel, astfel încât lungimea sa totală să fie egală cu valoarea parametrului totalWidth. Și în cea de-a doua formă a acestei metode, caracterele notate de parametrul paddingChar sunt inserate din partea stângă a liniei de apel, astfel încât lungimea sa totală să fie egală cu valoarea parametrului totalWidth. În ambele forme, șirul rezultat este returnat. Dacă totalWidth este mai mică decât lungimea șirului de apelare, este returnată o copie a șirului de apelare nemodificat.

PadDreapta () La fel ca PadLeft ()

Vă permite să completați șirul cu caractere la dreapta.

Inserați, ștergeți și înlocuiți șiruri
Inserați () șir public Inserare (int startIndex, valoare șir)

Folosit pentru a insera un rând în altul, unde valoarea denotă rândul de inserat în rândul apelant la index startIndex. Metoda returnează șirul rezultat.

Elimina () șir public Eliminare (int startIndex)

Șir public Remove (int startIndex, int count)

Folosit pentru a elimina o parte dintr-un șir. În prima formă a metodei Remove (), eliminarea este efectuată începând de la locația indicată de startIndex și continuând până la sfârșitul liniei. Și în a doua formă a acestei metode, numărul de caractere specificat de parametrul count este eliminat din șir, începând cu poziția indicată de indexul startIndex.

A inlocui () șir public Înlocuire (char oldChar, char newChar)

Șir public Înlocuire (șir oldValue, șir newValue)

Folosit pentru a înlocui o parte dintr-un șir. În prima formă a metodei Replace (), toate aparițiile lui oldChar din șirul de apelare sunt înlocuite cu newChar. Și în a doua formă a acestei metode, toate aparițiile șirului oldValue din șirul apelant sunt înlocuite cu șirul newValue.

Schimbarea cazului
Sus () șir public ToUpper ()

Scrie cu majuscule toate literele din șirul de apelare.

Pentru a reduce () șir public ToLower ()

Toate literele mici din șirul de apelare.

Obținerea unui subșir dintr-un șir
subșir () șir public Subșir (int startIndex)

Șir public Subșir (int startIndex, int lungime)

În prima formă a metodei Substring (), subșirul este preluat din poziția indicată de parametrul startIndex până la sfârșitul șirului de apelare. Cea de-a doua formă a acestei metode extrage un subșir format din numărul de caractere specificat de parametrul length, începând de la locația indicată de parametrul startIndex.

Următorul exemplu de program utilizează mai multe dintre metodele de mai sus:

Utilizarea sistemului; folosind System.Collections.Generic; folosind System.Linq; folosind System.Text; namespace ConsoleApplication1 (clasa Program (static void Main (șir argumente)) (// Compara primele două linii șir s1 = „acesta este un șir”; șir s2 = „acesta este text și acesta este un șir”; if (Șir. CompareOrdinal (s1, s2) ! = 0) Console.WriteLine ("Șirurile s1 și s2 nu sunt egale"); if (String.Compare (s1, 0, s2, 13, 10, true) == 0) Console.WriteLine ("În același timp, au același text "); // Concatenarea șirurilor Console.WriteLine (String.Concat (" \ n "+" Unu, doi "," trei, patru ")); // Căutați într-un șir // Prima apariție a unui subșir dacă (s2. IndexOf ("acest")! = -1) Console.WriteLine ("Cuvântul \" acest \ "a fost găsit în linie, este" + "la: (0 ) position", s2.IndexOf ("this")); // Ultima apariție a subșirului dacă (s2.LastIndexOf ("this")! = -1) Console.WriteLine ("Ultima apariție a cuvântului \" this \ "este" + "la pozitia (0)", s2.LastIndexOf ("acest" )); // Cauta dintr-o matrice de caractere char myCh = ("Y", "x", "t"); if ( s2.IndexOfAny (myCh)! = -1) Console.WriteLine ("Unul dintre caracterele din tabloul ch "+" găsit în curentul linie la poziţia (0) ", s2.IndexOfAny (myCh)); // Determinați dacă șirul începe cu un subșir dat dacă (s2.StartsWith ("acesta este text") == adevărat) Console.WriteLine ("Subșir găsit!"); // Determinați dacă șirul conține un subșir // folosind exemplul de definire a șirului de sistem de operare al utilizatorului myOS = Environment.OSVersion.ToString (); if (myOS.Contains ("NT 5.1")) Console.WriteLine ("Sistemul dvs. de operare este Windows XP"); else if (myOS.Contains ("NT 6.1")) Console.WriteLine ("Sistemul dvs. de operare Windows 7"); Console.ReadLine (); )))

Câteva despre compararea șirurilor în C #

Dintre toate operațiunile de procesare a șirurilor de caractere, este probabil ca un șir să fie comparat cu altul. Înainte de a lua în considerare orice metodă de comparare a șirurilor, trebuie subliniate următoarele: comparațiile de șiruri pot fi efectuate în .NET Framework în două moduri principale:

    În primul rând, comparația poate reflecta obiceiurile și normele unui anumit cadru cultural, care sunt adesea setari culturale care intră în vigoare atunci când programul este derulat. Acesta este un comportament standard pentru unele metode de comparație, dar nu pentru toate.

    Și în al doilea rând, comparația poate fi efectuată indiferent de setările mediului cultural doar prin valorile ordinale ale personajelor care alcătuiesc șirul. În general, comparațiile de șiruri neglijate din punct de vedere cultural folosesc ordinea lexicografică (și considerațiile lingvistice) pentru a determina dacă un șir este mai mare decât, mai mic sau egal cu un alt șir. Într-o comparație ordinală, șirurile sunt pur și simplu ordonate pe baza valorii neschimbate a fiecărui caracter.

Din cauza diferitelor metode de comparare culturală și ordinală pentru compararea șirurilor de caractere și a implicațiilor fiecărei astfel de comparații, se recomandă insistent să urmați cele mai bune practici oferite în prezent de Microsoft. La urma urmei, alegerea modului greșit de a compara șirurile poate duce la funcționarea incorectă a programului atunci când este utilizat într-un mediu diferit de cel în care a fost dezvoltat.

Alegerea modului de comparare a șirurilor de caractere este o decizie foarte importantă. Ca regulă generală și fără excepție, compararea șirurilor de caractere adecvată din punct de vedere cultural ar trebui să fie aleasă dacă aceasta are scopul de a afișa rezultatul pentru utilizator (de exemplu, pentru a afișa o serie de șiruri sortate în ordine lexicografică). Cu toate acestea, dacă șirurile conțin informații fixe care nu sunt menite să fie modificate pentru a se adapta diferențelor culturale, cum ar fi un nume de fișier, un cuvânt cheie, o adresă de site web sau o valoare de securitate, atunci ar trebui să alegeți o comparație de șiruri ordinale. Desigur, specificul unei anumite aplicații în curs de dezvoltare va dicta alegerea unui mod adecvat de a compara șirurile de caractere.

Clasa String oferă o varietate de metode de comparare a șirurilor, care sunt enumerate în tabelul de mai sus. Cea mai versatilă dintre acestea este metoda Compare (). Vă permite să comparați două șiruri de caractere în întregime sau parțial, sensibile la majuscule sau minuscule, modul de comparare definit de parametrul tip StringComparison precum și informațiile de cultură furnizate cu un parametru de tip CultureInfo.

Supraîncărcările Compare () care nu conțin un parametru de tip StringComparison efectuează o comparație a șirurilor de caractere care ține seama de majuscule și minuscule și de cultură. Și în acele variante supraîncărcate care nu conțin un parametru de tip CultureInfo, informațiile de cultură sunt determinate de timpul de execuție curent.

Tipul StringComparison este o enumerare care definește valorile prezentate în tabelul de mai jos. Folosind aceste valori, puteți aranja comparații de șiruri pentru a se potrivi nevoilor aplicației dvs. Prin urmare, adăugarea unui parametru de tip StringComparison extinde metoda Compare () și alte metode de comparare, cum ar fi Equals (). De asemenea, face posibilă indicarea fără ambiguitate a modului în care ar trebui să fie comparate șirurile.

Din cauza diferențelor dintre comparațiile de șiruri sensibile la cultură și comparațiile ordinale, este foarte important să fii cât mai precis posibil în acest sens.

Valori definite în enumerarea StringComparison
Sens Descriere
CurrentCulture Comparațiile de șiruri sunt făcute folosind setările curente de cultură
CurrentCultureIgnoreCase Comparațiile de șiruri se fac folosind setările curente de cultură, dar nu țin cont de majuscule și minuscule
InvariantCulture Compararea șirurilor se face folosind imuabil, adică date universale despre mediul cultural
InvariantCultureIgnoreCase Compararea șirurilor se face folosind imuabil, adică date universale despre mediul cultural și care nu țin cont de majuscule și minuscule
Ordinal Comparațiile de șiruri se fac folosind valorile ordinale ale caracterelor din șir. În acest caz, ordinea lexicografică poate fi încălcată, iar convențiile adoptate într-un mediu cultural separat sunt ignorate.
OrdinalIgnoreCase Compararea șirurilor se realizează folosind valori ordinale ale caracterelor din șir, dar nu țin cont de majuscule și minuscule

În ambele cazuri, metoda Compare () returnează o valoare negativă dacă primul șir comparat este mai mic decât al doilea; valoare pozitivă dacă primul șir comparat este mai mare decât al doilea; și în final zero dacă ambele șiruri de caractere comparate sunt egale. Deși metoda Compare () returnează zero dacă șirurile comparate sunt egale, este, în general, cel mai bine să folosiți metoda Equals () sau operatorul == pentru a determina dacă șirurile de caractere sunt egale.

Ideea este că metoda Compare () determină egalitatea șirurilor comparate pe baza ordinii lor de sortare. De exemplu, dacă comparați șiruri într-un mod sensibil la cultură, atunci ambele șiruri pot fi aceleași în ordinea în care sunt sortate, dar nu sunt substanțial egale. În mod implicit, egalitatea șirurilor este determinată în metoda Equals () pe baza valorilor de caractere ordinale și este insensibilă din punct de vedere cultural. Prin urmare, în mod implicit, ambele șiruri sunt comparate în această metodă pentru egalitate absolută, caracter cu caracter, la fel ca în operatorul ==.

Deși metoda Compare () este mai versatilă, este mai ușor să utilizați metoda CompareOrdinal () pentru comparații ordinale simple ale șirurilor de caractere. În cele din urmă, rețineți că metoda CompareTo () compară doar șiruri de caractere în funcție de cultură.

Următorul program demonstrează utilizarea metodelor Compare (), Equals (), CompareOrdinal () și a operatorilor == și! = pentru a compara șirurile de caractere. Rețineți că primele două exemple de comparație ilustrează diferența dintre comparațiile de șiruri sensibile din punct de vedere cultural și comparațiile ordinale în limba engleză:

Utilizarea sistemului; Exemplu de clasă (static void Main () (șir str1 = "alfa"; șir str2 = "Alfa"; șir str3 = "Beta"; șir str4 = "alfa"; șir str5 = "alfa, beta"; rezultat int; / / Mai întâi, demonstrați diferența dintre compararea șirurilor sensibile la cultură și rezultatul comparației ordinale = String.Compare (str1, str2, StringComparison.CurrentCulture); Console.Write ("Comparare șiruri sensibile la cultură:"); if (rezultat 0 ) Console .WriteLine (str1 + „mai mare decât” + str2); altfel Console.WriteLine (str1 + „egal cu” + str2); rezultat = String.Compare (str1, str2, StringComparison.Ordinal); Console.Write („Comparație ordinală linii: "); dacă (rezultat 0) Console.WriteLine (str1 +" mai mare decât "+ str2); altfel Console.WriteLine (str1 +" egal cu "+ str4); // Utilizați metoda CompareOrdinal () rezultat = șir .CompareOrdinal ( str1, str2); Console.Write ("Comparați șirurile folosind metoda CompareOrdinal (): \ n"); if (rezultat 0) Console.WriteLine (str1 + "mai" + str2); else Console.WriteLine ( str 1 + „egal” + str4); Console.WriteLine (); // Determinați egalitatea șirurilor folosind operatorul == // Aceasta este o comparație ordinală a șirurilor de caractere dacă (str1 == str4) Console.WriteLine (str1 + "==" + str4); // Determinați inegalitatea șirurilor folosind operatorul! = If (str1! = Str3) Console.WriteLine (str1 + "! =" + Str3); if (str1! = str2) Console.WriteLine (str1 + "! =" + str2); Console.WriteLine (); // Efectuați o comparație ordinală a șirurilor de caractere care nu ține seama de majuscule // folosind metoda Equals () if (String.Equals (str1, str2, StringComparison.OrdinalIgnoreCase)) Console.WriteLine ("Compararea șirurilor folosind metoda Equals () cu" + "Parametrul OrdinalIgnoreCase: \ n "+ str1 +" este egal cu "+ str2); Console.WriteLine (); // Comparați părți ale șirurilor de caractere dacă (String.Compare (str2, 0, str5, 0, 3, StringComparison.CurrentCulture)> 0) (Console.WriteLine ("Comparați șirurile pe baza culturii curente:" + "\ n3 primele caractere a liniei „+ str2 +” este mai mare decât primele 3 caractere ale șirului „+ str5);)))

Executarea acestui program produce următorul rezultat:

Vă rugăm să suspendați AdBlock pe acest site.

Deci, șirurile în C. Nu există un tip de date separat pentru ele, așa cum se face în multe alte limbaje de programare. În C, un șir este o matrice de caractere. Pentru a marca sfârșitul unei linii, se folosește caracterul „\ 0”, despre care am vorbit în ultima parte a acestei lecții. Nu este afișat în niciun fel pe ecran, așa că nu îl veți putea privi.

Crearea și inițializarea șirurilor

Deoarece un șir este o matrice de caractere, declararea și inițializarea unui șir este aceeași ca și pentru tablourile unidimensionale.

Următorul cod ilustrează diferite moduri de inițializare a șirurilor.

Listarea 1.

str. Char; char str1 = ("Y", "o", "n", "g", "C", "o", "d", "e", "r", "\ 0"); char str2 = "Bună ziua!"; char str3 = "Bună ziua!";

Fig. 1 Declararea și inițializarea șirurilor

Pe prima linie, declarăm doar o matrice cu zece caractere. Nu este chiar un șir, de vreme ce nu are caracterul nul \ 0 atâta timp cât este doar un set de caractere.

A doua linie. Cel mai simplu mod de a inițializa în frunte. Declaram fiecare caracter separat. Principalul lucru aici este să nu uitați să adăugați caracterul nul \ 0.

A treia linie este analogă cu a doua linie. Fii atent la imagine. pentru că există mai puține caractere în șirul din dreapta decât elementele din matrice, restul elementelor vor fi umplute cu \ 0.

A patra linie. După cum puteți vedea, nu există nicio dimensiune specificată aici. Programul îl va calcula automat și va crea o matrice de caractere de lungimea necesară. În acest caz, ultimul va fi inserat caracterul nul \ 0.

Cum se scoate un șir

Să adăugăm codul de mai sus la un program cu drepturi depline care va afișa liniile create pe ecran.

Lista 2.

#include int main (void) (char str; char str1 = ("Y", "o", "n", "g", "C", "o", "d", "e", "r", " \ 0 "); char str2 =" Bună! "; Char str3 =" Bună! "; Pentru (int i = 0; i< 10; i = i + 1) printf("%c\t",str[i]); printf("\n"); puts(str1); printf("%s\n",str2); puts(str3); return 0; }


Fig. 2 Diferite moduri de afișare a unui șir pe ecran

După cum puteți vedea, există mai multe modalități de bază de a afișa un șir pe ecran.

  • utilizați funcția printf cu specificatorul %s
  • folosește funcția puts
  • utilizați funcția fputs, specificând stdout ca al doilea parametru.

Singura avertizare cu funcțiile put și fputs. Rețineți că funcția puts împachetează ieșirea la următoarea linie, dar funcția fputs nu.

După cum puteți vedea, concluzia este destul de simplă.

Siruri de intrare

Introducerea șirurilor este puțin mai complicată decât ieșirea. Cea mai simplă cale ar fi următoarea:

Lista 3.

#include int main (void) (char str; gets (str); puts (str); return 0;)

Funcția gets întrerupe programul, citește un șir de caractere introdus de la tastatură și îl plasează într-o matrice de caractere, al cărui nume este transmis funcției ca parametru.
Finalizarea funcției gets va fi caracterul corespunzător tastei enter și scris în șir ca caracter nul.
Ai observat pericolul? Dacă nu, compilatorul vă va avertiza cu drag. Ideea este că funcția gets iese numai atunci când utilizatorul apasă tasta Enter. Acest lucru este plin de faptul că putem merge dincolo de matrice, în cazul nostru - dacă sunt introduse mai mult de 20 de caractere.
Apropo, erorile de depășire a tamponului erau considerate anterior cel mai comun tip de vulnerabilitate. Se găsesc și astăzi, dar a devenit mult mai dificil să le folosești pentru a sparge programe.

Deci ce avem. Avem o sarcină: să scriem un șir într-o matrice de dimensiune limitată. Adică trebuie să controlăm cumva numărul de caractere introduse de utilizator. Aici ne vine în ajutor funcția fgets:

Lista 4.

#include int main (void) (char str; fgets (str, 10, stdin); puts (str); return 0;)

Funcția fgets ia trei argumente ca intrare: o variabilă pentru a scrie șirul, dimensiunea șirului de scris și numele fluxului de unde să obțineți datele de scris în șir, în acest caz, stdin. După cum știți deja din lecția 3, stdin este o intrare standard, de obicei asociată cu o tastatură. Nu este deloc necesar ca datele să provină din fluxul stdin; în viitor, vom folosi și această funcție pentru a citi datele din fișiere.

Dacă în timpul execuției acestui program introducem un șir mai mare de 10 caractere, doar 9 caractere de la început și oricum se va scrie în matrice o întrerupere de linie, fgets va „taia” șirul la lungimea necesară.

Rețineți că fgets nu citește 10 caractere, ci 9! După cum ne amintim, în șiruri, ultimul caracter este rezervat unui caracter nul.

Hai să verificăm. Să începem programul de la ultima listare. Și introduceți linia 1234567890. Ecranul afișează șirul 123456789.


Fig. 3 Un exemplu despre cum funcționează funcția fgets

Se pune întrebarea. Unde s-a dus al zecelea personaj? Și voi răspunde. Nu a mers nicăieri, a rămas în fluxul de intrare. Rulați următorul program.

Lista 5.

#include int main (void) (char str; fgets (str, 10, stdin); puts (str); int h = 99; printf ("do% d \ n", h); scanf ("% d", & h ); printf ("posle% d \ n", h); return 0;)

Iată rezultatul muncii ei.


Figura 4 Buffer stdin non-gol

Lasă-mă să explic ce s-a întâmplat. Am numit funcția fgets. Ea a deschis un flux de intrare și a așteptat să introducem date. Am introdus 1234567890 de la tastatură \ n (\ n Adică apăsând tasta Enter). Acesta a mers la fluxul de intrare stdin. Funcția fgets, așa cum era de așteptat, a luat primele 9 caractere 123456789 din fluxul de intrare, a adăugat un caracter nul \ 0 și l-a scris în șirul str. Au mai rămas 0 \ n în fluxul de intrare.

În continuare, declarăm variabila h. Îi afișăm valoarea pe ecran. Apoi numim funcția scanf. Aici este de așteptat să putem introduce ceva, dar de atunci 0 \ n se blochează în fluxul de intrare, apoi funcția scanf percepe aceasta ca intrarea noastră, iar 0 este scris în variabila h. Apoi, îl afișăm pe ecran.

Acesta, desigur, nu este tocmai comportamentul pe care îl așteptăm. Pentru a face față acestei probleme, este necesar să ștergem tamponul de intrare după ce am citit o linie introdusă de utilizator din acesta. Funcția specială fflush este utilizată pentru aceasta. Are un singur parametru - fluxul de curățat.

Să reparăm ultimul exemplu, astfel încât să funcționeze previzibil.

Lista 6.

#include int main (void) (char str; fgets (str, 10, stdin); fflush (stdin); // șterge fluxul de intrare puts (str); int h = 99; printf ("do% d \ n", h ); scanf ("% d", & h); printf ("posle% d \ n", h); return 0;)

Programul va funcționa acum conform așteptărilor.


Fig. 4 Spălarea tamponului stdin cu fflush

În concluzie, se pot remarca două fapte. Primul. Nu este sigur să folosiți funcția gets în acest moment, așa că este recomandat să folosiți funcția fgets peste tot.

Al doilea. Nu uitați să goliți tamponul de intrare dacă utilizați funcția fgets.

Aceasta se încheie conversația despre introducerea șirurilor de caractere. Dați-i drumul.

Top articole similare