--- Output --- molle@molleServer:~/cpp/delete$ ./a.out med dig ged
Du skal lige kigge på at allokere et resultat array der er stort nok til at alle ord kan være forskellige.. Ellers virker det her vist nogenlunde, men jeg ved ikke om det kan gøres bedre rent preformance mæssigt..
Det du er ude i der er ret vanskeligt. Hvis nu, str_a = "Hej med dig din ged du lugter af ost"; str_b = "Hej dig med din ged du lugter af ost";
-hvorledes definerer du så det rigtige resultat (de to str er lige lange og indeholder nøjagtig de samme ord)?
Og ydeligere, hvis str_a = "Hej med dig din ged du lugter af ost"; str_b = "Hej med dig din ged din ged du lugter af ost"; -hvorledes definerer du så det rigtige resultat (hvilken af "din ged" er den rigtige hhv forkerte)?
Du kan søge på nettet efter noget der hedder "Needleman-Wunsch-algoritmen". Det er temmeligt langhåret, men gør LIGE PRÆCIS det du vil. Det er oprindeligt noget der er udviklet til genetik og er ret besværligt at programmere.
Kan i øvrigt knytte en kommentar mere. Hvis der kun er max EN eneste insertion et eller andet sted i str_b så kan det tænkes at det er billigt hvis du
1. bruger diff som ovenfor. Nu har du hvor de begynder at være forskellige. 2. reverterer strengene (i C hedder funktionen strrev/_strrev, C++ aner jeg ikke), og bruger diff igen 3. derefter bruger du de to diff til at beregne hvor insertionen starter og slutter
Husk at når du skal beregne hvor den slutter skal du tage højde for at diff nr 2 blev anvendt på den reverterede streng.
hej tigertool: du skal nok modificere koden lidt for at få det rigtige resultat. Det er vist umiddelbart nødvendigt at køre while'en på begge strenge.
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.