if-statement i en array (var: Arduino)

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Camro
Inlägg: 34
Blev medlem: 6 april 2011, 23:34:07

if-statement i en array (var: Arduino)

Inlägg av Camro »

Hej alla elektonikfantaster!

Hur kan ett if statement vara skrivet för en array med följande vilkor: om två likadana siffror står i följd efter varandra, så ersätt sista av de likadana siffrorna med siffran x?

ex. en array med siffrorna 23456678 ersätts med 23456x78

Grundläggande hur ett if statement skrivs kan jag, men detta är svårare...

Mvh Tommy
Senast redigerad av MadModder 13 mars 2015, 15:25:50, redigerad totalt 1 gång.
Anledning: flyttat och ändrat rubrik
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Arduino

Inlägg av Icecap »

Vad har det med Arduino att göra? Det är en helt vanligt programmeringsfråga.

Först och främst måste det göras en slinga som räknar igenom samtliga tecken - 1.

Kod: Markera allt

for(Ctr = 0; Ctr < (strlen(Array) - 1); Ctr++)
  {
  if(Array[Ctr] == Array[Ctr+1]) Array[Ctr+1] = 'x';
  }
EDIT: Swech hittade felet jag (såklart medvetet :vissla:) lade in. Har ändrat koden för att inte virra bort mindre erfarna personer.
Senast redigerad av Icecap 12 mars 2015, 14:32:22, redigerad totalt 2 gånger.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Arduino

Inlägg av Swech »

:humm: Ramlar du inte utanför arrayen i sista jämförelsen i en loop Icecap?


Swech
bearing
Inlägg: 11672
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Arduino

Inlägg av bearing »

En relevant fråga är väl vad som ska hända om 3 eller flera siffror står i följd?

Till exempel 15552, ska det bli 15x52, 155x2, eller 15xx2?
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Arduino

Inlägg av Icecap »

Swech: Näääää - inte då! :lie:

Bearing: först blir "155" till "15x", nästa steg blir "15x5" och till slut "15x52".
TS har ju inte specificerat annat än att två på varandra lika ska ha set sista av dessa två bytt till "annat", i detta fall 'x'.
bearing
Inlägg: 11672
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Arduino

Inlägg av bearing »

Jag förstår vad din kod kommer göra. Vi får väl se vad trådskaparen svarar. Men han kanske kan fylla i luckorna själv nu när han har en kod att utgå ifrån.
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: Arduino

Inlägg av johano »

bearing skrev:En relevant fråga är väl vad som ska hända om 3 eller flera siffror står i följd?

Till exempel 15552, ska det bli 15x52, 155x2, eller 15xx2?
Om nu TS vill ha den sistnämnda funktionen så funkar denna lilla snutt

Kod: Markera allt

    char str[]="00000123456677788888999999999000";
    
    for(char*p=str+1;*p;p++)
    {
        char *pc;
        for(pc=p;*pc && *pc==*(p-1);pc++)
            *pc='x';
           
        p=pc;
    }
    
    // str är nu: 0xxxx123456x7xx8xxxx9xxxxxxxx0xx
/johan
Camro
Inlägg: 34
Blev medlem: 6 april 2011, 23:34:07

Re: Arduino

Inlägg av Camro »

Tack för alla svar!

Ska prova detta i mitt projekt.

Om flera siffror står i följd så är tanken att det ska bli så här: ex 222222 blir 2x2x2x
Arrayens längd i mitt projekt är alltid 6 siffror.

Mvh Tommy
thomasloven
Inlägg: 96
Blev medlem: 2 februari 2011, 13:16:32
Kontakt:

Re: Arduino

Inlägg av thomasloven »

Pratar vi en sträng av siffror där en siffra ska ersättas med bokstaven 'x' - vilket alla verkar anta - eller en array av siffror där x i frågan motsvarar en annan siffra - vilket det faktiskt står?

I det senare fallet borde

Kod: Markera allt

for(int i = 1; i<7; i++)
{
  if(array[i]==array[i-1])
  {
    array[i] = x;
    i++;
  }
}
funka även om x råkar vara samma siffra som den som byttes ut.

I det tidigare fallet:

Kod: Markera allt

char *c = string;
while(++c)
{
  if(*c == c[-1]) *c = 'x';
}
...eller om man gillar kod-golf...

Kod: Markera allt

char *c = &string[1];
while(*c++=*c-c[-1]?*c:'x');
Alla kodsnuttarna är otestade, men jag rekommenderar inte den sista eftersom den bygger på odefinierat beteende.
Camro
Inlägg: 34
Blev medlem: 6 april 2011, 23:34:07

Re: if-statement i en array (var: Arduino)

Inlägg av Camro »

Hej igen
thomasloven skrev:Pratar vi en sträng av siffror där en siffra ska ersättas med bokstaven 'x' - vilket alla verkar anta - eller en array av siffror där x i frågan motsvarar en annan siffra - vilket det faktiskt står?

I det senare fallet borde

Kod: Markera allt

for(int i = 1; i<7; i++)
{
  if(array[i]==array[i-1])
  {
    array[i] = x;
    i++;
  }
}
funka även om x råkar vara samma siffra som den som byttes ut.

I det tidigare fallet:

Kod: Markera allt

char *c = string;
while(++c)
{
  if(*c == c[-1]) *c = 'x';
}
...eller om man gillar kod-golf...

Kod: Markera allt

char *c = &string[1];
while(*c++=*c-c[-1]?*c:'x');
Alla kodsnuttarna är otestade, men jag rekommenderar inte den sista eftersom den bygger på odefinierat beteende.

Första kodexemplet var precis det jag sökte!

Tack alla för ert engagemang, och speciellt thomasloven.

Återkommer säkert med fler frågor, ha det bra!

Mvh Tommy
Skriv svar