Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2018-06-10, 23:00
  #1
Medlem
Ranndalls avatar
Uppgift: Skriv ett litet program där användaren ombeds att skriva in sitt förnamn och efternamn som två separata strängar. Programmet ska sedan skriva ut förnamn och efternamn på rövarspråket, vilket innebär att alla konsonanter skrivs ut enligt mönstret <konsonant>o<konsonant>. Exempelvis blir namnet ”Martin” ”MoMarortotinon”. Vokalerna lämnas oförändrade.

Har inte någon kod för denna uppgift. Tror jag skulle ha ganska lätt för den. Undrar mer vilken metod man skulle kunna använda för att få till "rövarspråket"?
Citera
2018-06-10, 23:53
  #2
Medlem
pponmms avatar
Det du bör göra är helt enkelt att ha två strängar, där du sparar namnet i den ena, och namnet på rövarspråket i den andra. Sedan har du även en vektor innehållandes alla konsonanter.

Först lägger du in alla konsonanter i vektorn.

Sedan lägger du in namnet i den första strängen.

Nu använder du en loop för att gå igenom varje bokstav i namnet. För varje bokstav du går igenom så lägger du till den i slutet av den andra strängen. Om en bokstav som du går igenom finns med i vektorn, så lägger du till ett "o" och samma bokstav i den andra strängen igen innan du fortsätter att loopa.


Så kort och gott så konstruerar du en ny sträng med namnet på rövarspråket genom att gå igen varje bokstav i det riktiga namnet och lägga till eventuella o:n och extra konsonanter.

Använd en loop även när du kollar om en bokstav finns med i vektorn där du har dina konsonanter.

Lycka till!
Citera
2018-06-11, 00:38
  #3
Medlem
Ranndalls avatar
Citat:
Ursprungligen postat av pponmm
text
Smart det borde funka, återkommer om jag får problem med koden.
Citera
2018-06-11, 11:44
  #4
Medlem
Ranndalls avatar
Citat:
Ursprungligen postat av pponmm
text
Har försökt lösa problemet på ett lite annorlunda sätt men det blir fel. Postar min kod. Hoppas det inte blir svårt att följa den:

Kod:
#include <stdio.h>

int main(){
   
    int i;
    int t = 0;
    char fnamn[10], frov[25], enamn[10], erov[25];
    
    printf("\nSkriv in förnamn: ");
    scanf("%s", fnamn);
    
    for (i = 0; i < 10; i++) {
       
        if (fnamn[i] != ('a' || 'e' || 'i' || 'o' || 'u' || 'y')){
            
            t = 0;
            frov[i] = 'O';
            frov[i+1] = fnamn[i];
            frov[i+2] = 'O';
            t = i +2;}
    
    else{
        frov[i + t] = fnamn[i];
        t = 0;}}
    
    printf("\nDitt namn på rövarspråk är: %s\n", frov);
        
    
    return 0;
}
Citera
2018-06-11, 13:01
  #5
Medlem
Citat:
Ursprungligen postat av Ranndall
Har försökt lösa problemet på ett lite annorlunda sätt men det blir fel. Postar min kod. Hoppas det inte blir svårt att följa den:

Kod:
#include <stdio.h>

int main(){
   
    int i;
    int t = 0;
    char fnamn[10], frov[25], enamn[10], erov[25];
    
    printf("\nSkriv in förnamn: ");
    scanf("%s", fnamn);
    
    for (i = 0; i < 10; i++) {
       
        if (fnamn[i] != ('a' || 'e' || 'i' || 'o' || 'u' || 'y')){
            
            t = 0;
            frov[i] = 'O';
            frov[i+1] = fnamn[i];
            frov[i+2] = 'O';
            t = i +2;}
    
    else{
        frov[i + t] = fnamn[i];
        t = 0;}}
    
    printf("\nDitt namn på rövarspråk är: %s\n", frov);
        
    
    return 0;
}

Är det meningen att ditt program ska skrivas i C eller i C++?
Citera
2018-06-11, 14:37
  #6
Medlem
Ranndalls avatar
Citat:
Ursprungligen postat av IngetNick2
Är det meningen att ditt program ska skrivas i C eller i C++?
C, syns det inte? Trodde de va skillnad på c och c++
Citera
2018-06-11, 20:12
  #7
Medlem
Citat:
Ursprungligen postat av Ranndall
C, syns det inte? Trodde de va skillnad på c och c++
Det syns jävligt tydligt, men samtidigt har du döpt tråden till "vektorer och strängar" vilket är c++-koncept...
Citera
2018-06-11, 22:00
  #8
Moderator
RostigHinks avatar
En bit på vägen.
Kod:
#include <stdio.h>

int main() {

  int i;
  int j;
  char fnamn[10], frov[25], enamn[10], erov[25];

  printf("\nSkriv in förnamn: ");
  scanf("%s", fnamn);

  for (i = 0, j = 0; fnamn[i] != '\0'; i++, j++) {

    if (fnamn[i] != 'a' &&
        fnamn[i] != 'e' &&
        fnamn[i] != 'i' &&
        fnamn[i] != 'o' &&
        fnamn[i] != 'u' &&
        fnamn[i] != 'y') {

      frov[j++] = fnamn[i];
      frov[j++] = 'o';
      frov[j] = fnamn[i];
    }
    else {
      frov[j] = fnamn[i];
    }
  }
  printf("\nDitt namn på rövarspråk är: %s\n", frov);
  return 0;
}
Din if-sats gör inte vad du tror, du behöver ett logiskt uttryck för varje bokstav du vill kolla. Mittexempel funkar bara med små vokaler, för att det ska bli komplett behöver man även kolla stora sådana. Jag visar hur det kan se ut halvvägs, resten är upp till dig. Observera att jag fixade for-loopen så den inte loopar över mer än namnets längd, scanf() levererar en '\0' i slutet.
Citera
2018-06-11, 22:18
  #9
Moderator
vhes avatar
Rubrik korrigerad.

Utgående rubrik: Vektorer och strängar
Ny rubrik: Rövarspråket i C

Om TS har synpunkter på ändringen, eller förslag på bättre rubrik är denne välkommen att kontakta mig.

/Moderator
Citera
2018-06-12, 02:55
  #10
Medlem
Ranndalls avatar
Citat:
Ursprungligen postat av RostigHink
En bit på vägen.
Kod:
#include <stdio.h>

int main() {

  int i;
  int j;
  char fnamn[10], frov[25], enamn[10], erov[25];

  printf("\nSkriv in förnamn: ");
  scanf("%s", fnamn);

  for (i = 0, j = 0; fnamn[i] != '\0'; i++, j++) {

    if (fnamn[i] != 'a' &&
        fnamn[i] != 'e' &&
        fnamn[i] != 'i' &&
        fnamn[i] != 'o' &&
        fnamn[i] != 'u' &&
        fnamn[i] != 'y') {

      frov[j++] = fnamn[i];
      frov[j++] = 'o';
      frov[j] = fnamn[i];
    }
    else {
      frov[j] = fnamn[i];
    }
  }
  printf("\nDitt namn på rövarspråk är: %s\n", frov);
  return 0;
}

Din if-sats gör inte vad du tror, du behöver ett logiskt uttryck för varje bokstav du vill kolla. Mittexempel funkar bara med små vokaler, för att det ska bli komplett behöver man även kolla stora sådana. Jag visar hur det kan se ut halvvägs, resten är upp till dig. Observera att jag fixade for-loopen så den inte loopar över mer än namnets längd, scanf() levererar en '\0' i slutet.
Fin kod. Förstår dock icke det fetstilade. För mig ser det ut som du lägger i en variabel i fröv. Sedan skriver du om samma och ligger in "o".?
Citera
2018-06-12, 07:08
  #11
Medlem
Citat:
Ursprungligen postat av Ranndall
Fin kod. Förstår dock icke det fetstilade. För mig ser det ut som du lägger i en variabel i fröv. Sedan skriver du om samma och ligger in "o".?
Nedanstående kod har samma effekt som den fetade koden.
Kod:
frov[j] = fnamn[i];
j = j + 1;
frov[j] = 'o';
j = j + 1;
frov[j] = fnamn[i];
j++ returnerar det nuvarande värdet, och sen ökar det variabelvärdet.

Det går även skriva ++j, som dock först ökar variabelvärdet och sen returnerar det nya värdet.
Citera
2018-06-12, 07:27
  #12
Moderator
RostigHinks avatar
Citat:
Ursprungligen postat av Ranndall
Fin kod. Förstår dock icke det fetstilade. För mig ser det ut som du lägger i en variabel i fröv. Sedan skriver du om samma och ligger in "o".?
&& är logiskt AND. Dvs uttrycket a && b är sant endast om både a och b är sanna. I min if-sats är hela uttrycket sant om och endast om bokstaven inte är en av de 6 vokalerna. Jag la varje led i uttrycket på ny rad av kosmetiska skäl. Kompilatorn betraktar ny rad som mellanslag (utom i makrodefinitioner men det är en annan diskussion).

Autoinkrement (j++) fick du redan svaret på. Observera att jag kör 2 loopvariabler i for-loopen och inkrementerar en av dem extra mycket.
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback