Computer Games Forum
 

Go Back   Computer Games Forum > Tech > The Workshop > Limbaje de programare

Notices

Căutare produse PC Garage: Şterge căutarea

Reply
 
LinkBack Thread Tools
Old 01-06-2007, 16:59   #1 (permalink)
Registered User
 
amosfaimos's Avatar
 
Join Date: May 2004
Question Cauta cbA in AbcDef ..in c/c++ ? any idea? :)

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....
 
amosfaimos is offline    Send Message via Google Talk to amosfaimos Reply With Quote
Old 02-06-2007, 14:53   #2 (permalink)
Registered User
 
RedGuard's Avatar
 
Join Date: Aug 2006
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.
 
RedGuard is offline    Reply With Quote
Old 03-06-2007, 21:19   #3 (permalink)
Registered User
 
DeceaseD's Avatar
 
Join Date: Oct 2004
Location: in cimitir, pe stanga.
[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."
 
DeceaseD is offline    Reply With Quote
Old 09-06-2007, 16:19   #4 (permalink)
Registered User
 
WyldSnake's Avatar
 
Join Date: Jun 2006
Location: Capital of culture
Algoritmul prezentat de DeceaseD poate fi usor transpus in C/C++, daca asta vrei.

Ciudat ca ai folosit while pentru prima struct repetitiva si for pentru a doua, nu prea vad scopul.
 
WyldSnake is offline    Reply With Quote
Old 08-07-2007, 22:51   #5 (permalink)
Registered User
 
adimisu's Avatar
 
Join Date: Jul 2007
Location: Buttsylvania
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.
 
adimisu is offline    Reply With Quote
Advertisment
Reply

  Computer Games Forum > Tech > The Workshop > Limbaje de programare

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT +2. The time now is 06:37.


Advertisement System V2.5 By   Branden
This site is copyrighted ©1997 - 2008, Computer Games Online SRL