![]() |
| | #1 (permalink) | ||
|
Cauta cbA in AbcDef ...sunt 2 siruri..dc exista literele din primul sir in al doilea sa le afiseze si nr cate sunt..ceva de gen: Cauta cbA in AbcDef 3....any ideas? ...of course fara strspn(" "," ")...eu ma gandeam ceva de genul gets(a), gets(b) ..dar nu am idee cum sa verif pe rand literele din primul sir dc apare in al 2-lea....
| |||
|
| | #2 (permalink) | ||
|
Vezi ca exista strcmp si stricmp. Hm, algoritmul ar fi: pentru fiecare litera din sirul 1 cauta numarul de aparitii in sirul 2. sf cauta sf pentru unde cauta numarul de aparitii in sirul 2 ar fi: pentru fiecare litera din sirul 2 daca litera_data_sir1 == litera curenta din sirul 2 contor := contor + 1; sf daca sf pentru
__________________ Accepta infrangerea in casa ta ca pe o veche prietena si fa-o geloasa cand noua ta amica numita succes te saruta cu dragoste si adoratie. | |||
|
| | #3 (permalink) | ||
|
[code]program ComparingStrings; uses crt; var a, b: string; l: integer; i : byte; begin a := 'cbA'; b := 'AbcDef'; l := length (b); k := 1; while k =< 3 do begin for i := 1 to l do begin if a[k] = a[i] then writeln (a[i]); end; k := k + 1; end; end.[/code]Personal prefer Pascal sau FreePascal si incerc sa evit C/C++ :P.
__________________ "Ele vin starnite de o primejdie ca de sfarsit de veac, si in spaima lor de necunoscutul barbat, se cred miresele mortii." | |||
|
| | #5 (permalink) | ||
|
Solutia mea: Probabil mai are ceva bug-uri, sunt doar un noob care acum invata C - ul . Sper sa te ajute.#include <stdio.h> #define MAXLEN 1023 //lungimea maxima pt o linie enum boolean { NO, YES }; int getline(char *s, int sz); //functie pt citit sirurile void strcomp(const char *s, char *t); //functie pt compararea celor 2 siruri void strcut(char *s); //functia asta elimina caracterele duplicat din sirul //dupa care se face cautarea (ex aabbcc -> abc) //daca tu cauti in abcd dupa aabbccdd iti dubleaza //nr de aparitii int main(void) { char s[MAXLEN]; char t[MAXLEN]; while(getline(s, MAXLEN) && getline(t, MAXLEN)) { strcomp(s, t); } return(0); } //getline(s, sz) - citeste cate un caracter in sirul s. //citirea se opreste la caracterul newline, EOF sau //daca se atinge dimensiunea maxima (sz). //intoarce marimea liniei citite, excluzand caracterul '\0' int getline(char *s, int sz) { int i = 0, c; while(--sz > 0 && (c = getchar()) != EOF && c != '\n') { *s++ = c; ++i; } if(c == '\n') { *s++ = c; ++i; } *s = '\0'; return(i); } //compara cele 2 siruri si afiseaza rezultatele void strcomp(const char *s, char *t) { char found[MAXLEN]; //array pt stocare litere gasite int matches[MAXLEN]; //array pt stocare a nr de aparitii ale unei litere int i, j, k; int *ip = matches; //pointer la array-ul cu nr de aparitii ale unei litere char *p = found; //pointer la array-ul unde stocam literele gasite int found_this = NO; //asta e un flag care il folosesc pt a sti daca sa intcrementez cei 2 pointeri strcut(t); //elimina caracterele multiple din sirul dupa care cauti //initializare pt cele 2 array-uri for(i = 0; i < MAXLEN; ++i) { *(ip + i) = 0; } for(i = 0; i < MAXLEN; ++i) { *(p + i) = '\0'; } for(ip = matches, p = found; *t; ++t) //reinitializam cei 2 pointeri { found_this = NO; for(i = 0; *(s + i); ++i) { if(*t == *(s + i)) { ++*ip; *p = *t; found_this = YES; } } if(found_this) //daca am gasit ceva atunci incrementam cei 2 pointeri { ++ip; ++p; } } //afiseaza literele gasite si numarul lor ip = matches; p = found; if(*p) { for(; *p; ++ip, ++p) { printf("\nLitera %c apare de %d ori.", *p, *ip); } } else { printf("\nNu am gasit nimic."); } } //strcut(s) - elimina aparitiile multiple ale unui caracter //dintr-un sir void strcut(char *s) { int i, j, k; for(i = 0; *(s + i); ++i) { for(j = i + 1; *(s + j); ++j) { if(*(s + i) == *(s + j)) { for(k = j; *(s + k); ++k) { *(s + k) = *(s + k + 1); } *(s + k) = '\0'; } } } }
__________________ Keep buttwalking. | |||
|
| Advertisment | |
![]() |
|
| Thread Tools | |
|
|