12. marts 2002 - 22:32Der er
14 kommentarer og 1 løsning
problem med rekursiv palindrom funktion
Jeg har en rekursiv palindrom_funktion, der modtager to arrays - det orignale, et til at lægge en kopi i, længden på array og en hjælper-int som jeg skal bruge..
det ser sådan ud:
void palindrom_recursive(char arr[],char rev[], int sz, int hlp) { if (sz>1) // base case palindrom_recursive(arr,rev,sz-1,hlp+1); if (rev[sz]==' ') {rev[hlp]=arr[sz]; count++;} rev[hlp]=arr[sz-1];}
Den gør hvad den skal - vender strengen om og kopierer den over i rev. Men det er ikke altid et palindrom - hvad hvis der er spaces i ordene ... det er dette der er mit problem - hvordan tager jeg højde for det. Jeg prøver alt muligt, eks. checker for spaces, laver en tæller, der skal korte rev-arrayet ned med det antal spaces der er, så det bliver en streng . .. eller kan man bruge en tokenizer? Nogle bud. Har jeg forklaret mig godt nok ? Jeg vil gerne sammenligne den omvendte, sammentrukne (uden spaces) streng med det originale array, hvorfor jeg vil bestemme om det er et palindrom.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Hvis jeg kører indtil jeg møder første space får jeg ikke resten af strengen med. Eller hvad mener du her? jeg ved der er en metode til at vende en streng om, hvis det er det du mener, men jeg kan ligeså godt : få funktionen til at gøre det hele og det er også det jeg gerne vil.
Husk at selvom der er spaces kan det god være et palindrom Hvad med du er freud -> duerf re ud dette er et palindrom og derfor ville jeg gerne, vha funktionen, vende strengen om (så er det gjort), dernæst trimme for spaces -> for så kan man nemlig se om det er et palindrom en gang for alle og det uden at den der benytter funktionen behøver at vide det. Hvordan kringler jeg lige den?
Åh ja ... memset kender jegh ikke men det ser ud som om dener det mest skudsikre palindrom rutine. Den skal kunne tage 0 bogstaver = et palindrom 1 bogstav=palindrom hvis en sætnings første og sidste bogstav er de samme og detmellem liggende ord er et palindrom inkl. sætnings-palindrom. Lad mig lige teste den af, forstå den... imidlertid må du gerne lige forklare hvad du gør, så skal du nok få point.
Buffer er en midlertidig buffer til den konverterede tekst. Idx bruges til at indexere i Buffer. Len er længden af src p peger på den sidste character i src. pspace peger på den første character i src. pspace bruger jeg til at få den korrekte 'space' position over i dst.
Memset funktionen bruger jeg til a nul-stille min buffer til 0.
Jeg kører nu løkken igennem.
For hver gennemgang af løkken, så tæller er jeg pspace OP for at pege på den næste character, og p NED, for at pege på den næste character.
Hvis pspace peger på et mellemrum i den oprindlige tekst (src), så sørger jeg for at indsætte et mellemrum i nye tekst (Buffer).
Hvis pspace ikke peger på et mellemrum, så kopierer jeg det tegn som p peger på over i Buffer, men kun hvis det IKKE er et mellemrum. Hvis det er et mellemrum, så springer jeg det over.
funktionen Palidrom : du tager altså src og hver gang der er et space, så lægger du et space ind i Buffer? er det rigtigt? -> JA
Når du siger pspace++ så tæller du pointeren en frem, ikke? dvs du sætter pspace til at pege på den efterfølgende adresse.. ? ->JA/NEJ pspace kommer til at pege på den næste character.
Du skal allokere en buffer til dst altså char dst[32];
int main() { char *src="du er freud"; char dst[32]; palindrome p_; // har sat funktionen ind i en klasse der hedder palindrome p_.palindrom(src,&dst); cout << " src : " << src << endl; cout << " dst : " << dst << endl; return 0; }
Bruger du memset funktionen ? hvis ikke, så skal "Buffer" i funktionen nulstilles.
Tak for det, men jeg håber du vender tilbage når du har tid.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.