/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
kommentarer til svar på opgave
Fra : Christian Bruun


Dato : 03-05-09 20:13


Hejsa,

Jeg er igang med et lille c-selvstudium, og ville ønske nogen
kommentarer på flg. lille funktion og opgave:

Opgave: Write a function named censor that modifies a string by
replacing every occurence of the letters foo by xxx. Make the function
as short as possible without sacrificing clarity.

Svar:

int censor(char *tekst) // Erstatter 'foo' med'xxx'
{
   int o = 0;

   while(*tekst) {
      if (*tekst == 'f') {
       tekst++;
         do {
            if (*tekst == 'o') {
               o++;
               if (o == 2) {
                  *(tekst-2) = 'x';
                  *(tekst-1) = 'x';
                  *(tekst) = 'x';
                  o = 0;
                  break;
               }
               tekst++;
            }
         } while (o);
      }
      tekst++;
   }
return 0;
}


 
 
Arne Vajhøj (03-05-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 03-05-09 21:12

Christian Bruun wrote:
> Jeg er igang med et lille c-selvstudium, og ville ønske nogen
> kommentarer på flg. lille funktion og opgave:
>
> Opgave: Write a function named censor that modifies a string by
> replacing every occurence of the letters foo by xxx. Make the function
> as short as possible without sacrificing clarity.

Clarity er ikke et specielt veldefineret begreb.

> Svar:
>
> int censor(char *tekst) // Erstatter 'foo' med'xxx'
> {
>    int o = 0;
>
>    while(*tekst) {
>       if (*tekst == 'f') {
>        tekst++;
>          do {
>             if (*tekst == 'o') {
>                o++;
>                if (o == 2) {
>                   *(tekst-2) = 'x';
>                   *(tekst-1) = 'x';
>                   *(tekst) = 'x';
>                   o = 0;
>                   break;
>                }
>                tekst++;
>             }
>          } while (o);
>       }
>       tekst++;
>    }
> return 0;
> }

Mit forslag:

void censor(char *tekst)
{
int i;
for(i = 0; i < strlen(tekst) - 3; i++)
{
if(tekst[i] == 'f' && tekst[i+1] == 'o' && tekst[i+2] == 'o')
{
tekst[i] = 'x';
tekst[i+1] = 'x';
tekst[i+2] = 'x';
}
}
}

Arne

Christian Bruun (03-05-2009)
Kommentar
Fra : Christian Bruun


Dato : 03-05-09 21:47

Hej Arne

>Clarity er ikke et specielt veldefineret begreb.

enig

>Mit forslag:

>void censor(char *tekst)
>{
> int i;
> for(i = 0; i < strlen(tekst) - 3; i++)
> {
> if(tekst[i] == 'f' && tekst[i+1] == 'o' && tekst[i+2] == 'o')
> {
> tekst[i] = 'x';
> tekst[i+1] = 'x';
> tekst[i+2] = 'x';
> }
> }
>}

Tak for inspiration Opdagede også at mit første forslag går i
uendelig løkke hvis der er et foX (X forskellig fra o)

void censor2(char *tekst)
{
do {
if (*tekst == 'f') {
if ((*(tekst+1) == 'o') && (*(tekst+2) == 'o')) {
*(tekst) = 'x';
*(tekst+1) = 'x';
*(tekst+2) = 'x';
tekst += 2;
}
}
tekst++;
} while(*tekst);
}

Christian

Arne Vajhøj (04-05-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 04-05-09 02:59

Christian Bruun wrote:
>> Mit forslag:
>
>> void censor(char *tekst)
>> {
>> int i;
>> for(i = 0; i < strlen(tekst) - 3; i++)
>> {
>> if(tekst[i] == 'f' && tekst[i+1] == 'o' && tekst[i+2] == 'o')
>> {
>> tekst[i] = 'x';
>> tekst[i+1] = 'x';
>> tekst[i+2] = 'x';
>> }
>> }
>> }
>
> Tak for inspiration Opdagede også at mit første forslag går i
> uendelig løkke hvis der er et foX (X forskellig fra o)
>
> void censor2(char *tekst)
> {
> do {
> if (*tekst == 'f') {
> if ((*(tekst+1) == 'o') && (*(tekst+2) == 'o')) {
> *(tekst) = 'x';
> *(tekst+1) = 'x';
> *(tekst+2) = 'x';
> tekst += 2;
> }
> }
> tekst++;
> } while(*tekst);
> }

Jeg synes ikke at brug af pointer fremfor array og dobbelt if
gør koden mere læsbar.

Arne

Bertel Brander (03-05-2009)
Kommentar
Fra : Bertel Brander


Dato : 03-05-09 21:57

Christian Bruun skrev:
> Hejsa,
>
> Jeg er igang med et lille c-selvstudium, og ville ønske nogen
> kommentarer på flg. lille funktion og opgave:
>
> Opgave: Write a function named censor that modifies a string by
> replacing every occurence of the letters foo by xxx. Make the function
> as short as possible without sacrificing clarity.
>

En anden model:

#include <string.h>
#include <stdio.h>

char *Transform(char* inp)
{
char *s;
while((s = strstr(inp, "foo")) != 0)
memcpy(s, "xxx", 3);
return inp;
}

int main()
{
char Text[] = "Abc foo def foo";
Transform(Text);
printf("Result: %s\n", Text);
return 0;
}

Søg
Reklame
Statistik
Spørgsmål : 177554
Tips : 31968
Nyheder : 719565
Indlæg : 6408857
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste