9 svar
114 visningar
erze7811 är nöjd med hjälpen
erze7811 102
Postad: 7 dec 2022 12:41

Fördubbla en bokstav i ett ord.

Jag ska läsa in en string med max 1000 i längd.

Jag har börjat med att läsa in en sträng med fgets men vet inte hur jag ska fortsätta.

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

int main() {
    char text[1000] = {0};
    fgets(text,sizeof(text),stdin);
    printf("%s", text);
    
}
Laguna Online 28443
Postad: 7 dec 2022 12:45

Räkna hur många e:n det finns.

Analys 1202
Postad: 7 dec 2022 12:48

Du kan ju börja med att kolla att input korrekt, 

h+ antal en + y

läs strängen från start till slut för att konstatera detta.

anders_k 234
Postad: 7 dec 2022 19:04

du kan även lösa detta också utan att använda en buffer.

gör en do loop och använd fgetc för att läsa ett tecken.

kolla om tecknet är 'e', i så fall räkna upp "counter"

om tecknet är \n, EOF eller counter == 998 avsluta loopen

sedan är det bara att skriva ut 'h', en loop som skriver dubbelt så många 'e' dvs counter*2 och sedan ett 'y'

erze7811 102
Postad: 11 dec 2022 18:48

Nu går den igenom hela strängen och kollar efter antalet e, men hur ska jag skriva ut dubbelt så många e?

Hur fungerar fgetc? Försökte kolla på hur det används men fattade inte riktigt.

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

int main() {
    char text[100] = {0};
    int count = 0;
    fgets(text,sizeof(text),stdin);
    printf("%s", text);
  
     for (int i = 0; i < strlen(text); i++){
        if (text[i] == 'e') {
            count++;
        }
    }
}
Laguna Online 28443
Postad: 11 dec 2022 19:03

Gör en ny loop som skriver ut 2*count stycken e.

fgetc läser in ett enda tecken, men att göra som du gör med fgets går lika bra (så skulle jag också göra).

anders_k 234
Postad: 11 dec 2022 19:38 Redigerad: 11 dec 2022 19:41
erze7811 skrev:

Nu går den igenom hela strängen och kollar efter antalet e, men hur ska jag skriva ut dubbelt så många e?

Hur fungerar fgetc? Försökte kolla på hur det används men fattade inte riktigt.

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

int main() {
    char text[100] = {0};
    int count = 0;
    fgets(text,sizeof(text),stdin);
    printf("%s", text);
  
     for (int i = 0; i < strlen(text); i++){
        if (text[i] == 'e') {
            count++;
        }
    }
}

Så här kan man använda fgetc. Jag nämner detta bara som ett alternativ till att använda fgets.

#include <stdio.h>

int main()
{
 int counter = 0;
 int ch;
 do
 {
   ch = fgetc(stdin);
   if (ch == 'e') ++counter;
 }
 while (ch != '\n' && ch != EOF && counter != 998);

 fputc('h', stdout);
 for (int i = 0; i < counter*2; ++i)
   fputc('e', stdout);
 fputc('y', stdout);

 return 0;
}
erze7811 102
Postad: 11 dec 2022 21:08 Redigerad: 11 dec 2022 21:10

Såhär ser det ut nu:

Men den klara inte alla test cases, är det något som fattas?

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

int main() {
    char text[100] = {0};
    int count = 0;
    int i = 0;
    fgets(text,sizeof(text),stdin);
    
  
     for (i = 0; i < strlen(text); i++){
        if (text[i] == 'e') {
            count++;
        }
    }
    printf("h");
    for(i = 0; i < count *2; i++){
        printf("e");
    }
    printf("y\n");
return 0;
}
Laguna Online 28443
Postad: 11 dec 2022 21:11

Får du veta hur testfallen ser ut och vad som är fel?


Tillägg: 11 dec 2022 21:13

I alla fall en sak är att orden kan vara upp till 1000 i längd. Dina kan bara vara 100.

 

erze7811 102
Postad: 11 dec 2022 21:15

Ja det var det som var felet! Nu klarade det alla olika testfall, tack!

Svara Avbryt
Close