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);
}
Räkna hur många e:n det finns.
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.
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'
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++;
}
}
}
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).
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;
}
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;
}
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.
Ja det var det som var felet! Nu klarade det alla olika testfall, tack!