| | |
| Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
Autor | Správa |
---|
Registrovaný: 15.07.13 Prihlásený: 27.05.18 Príspevky: 243 Témy: 42 |
Potrebujem zmeniť malé písmená po bodke na veľké v súbore a už sa stým parám dva dni nevedeli by ste mi pomôcť? Kód: #include <stdio.h> #include <stdlib.h>
int main() { FILE *f; int c; f = fopen("vstup.txt", "r"); while ((c = getc(f)) != EOF){ putchar(c); } if((c=getc(f)) == '.'||((c=getc(f)) == '?') || ((c=getc(f)) == '!')){ c = getc(f); c = toupper(c); putc(c, f); } fclose(f); return 0; }
_________________ PC: MB MSI 970A-G43 CPU AMD FX6300 6*3,50GHt turbo 4,1Ghz GPU Gigabyte r7 370 windforce oc edition 2GB Ram 8GB Kingston fury hyperx 1866Mhz SSD:Kingston SSDNow V300 120GB HDD:Seagete baracuda 1TB 7200rpm HDD2 Samsung HD502HJ 500GB 7200RPM PSU fortron hexa + 500W cpu chladič zalman CNPS5X Performa NOTEBOOK:HP Elitebook 8460p Tablet:Prestigio visconte Quad: Mobil: Microsoft Lumia 640 Dual sim
Auto:Chevrolet camaro 1986 IROC-Z |
|
Registrovaný: 28.04.11 Prihlásený: 26.04.24 Príspevky: 296 Témy: 27 Bydlisko: Martin/Brno | Napísal mitko: 25.03.2017 10:15 | |
|
To co robi tento tvoj program je, ze Kód: while ((c = getc(f)) != EOF){ putchar(c); }
ti precita cely subor a jedine co spravi je, ze ho vypise do konzoly. Nasledne sa snazis 4-krat citat z uz precitaneho suboru, vzdy ked napises c=getc(f) tak to precita jeden znak, avsak vzdy to bude EOF, pretoze si uz cely subor precital. Potrebujes si to nejako rozvrhnut na dve fazy: 1. faza: Citam a zapisujem az kym nenajdem '.' 2. faza: Citam a zapisujem toupper Je uz na tebe ci zvolis dva while cykly pre kazdu fazu, alebo si oddelis tie fazy pomocou nejakeho flagu, ktory nastavis na true ak si nasiel bodku.
|
|
Registrovaný: 15.07.13 Prihlásený: 27.05.18 Príspevky: 243 Témy: 42 |
Kód: #include <stdio.h> #include <ctype.h>
int main(){ int ch, pismeno = 0; FILE *f; f = fopen ("vstup.txt","r"); while ( (ch = fgetc (f)) != EOF ) { if (!pismeno && islower(ch)) ch = toupper(ch); printf ("%c",ch); pismeno = isalpha(ch); } fclose (f); return(0); } Kamarát to urobil takto môžem sa spýtať že čo to robí? a prečo to ide? a ako to zmeniť aby to menilo na veľké písmená len na začiatku vety?
_________________ PC: MB MSI 970A-G43 CPU AMD FX6300 6*3,50GHt turbo 4,1Ghz GPU Gigabyte r7 370 windforce oc edition 2GB Ram 8GB Kingston fury hyperx 1866Mhz SSD:Kingston SSDNow V300 120GB HDD:Seagete baracuda 1TB 7200rpm HDD2 Samsung HD502HJ 500GB 7200RPM PSU fortron hexa + 500W cpu chladič zalman CNPS5X Performa NOTEBOOK:HP Elitebook 8460p Tablet:Prestigio visconte Quad: Mobil: Microsoft Lumia 640 Dual sim
Auto:Chevrolet camaro 1986 IROC-Z |
|
Registrovaný: 28.04.11 Prihlásený: 26.04.24 Príspevky: 296 Témy: 27 Bydlisko: Martin/Brno | Napísal mitko: 25.03.2017 10:34 | |
|
Nemyslim si ze to funguje spravne, nikde tam neriesi ci uz precital tu bodku. Takisto tam zbytocne riesi ci je precitany znak pismeno a ci je male. Podla dokumentacie http://www.cplusplus.com/reference/cctype/toupper/ toupper nezmeni hodnotu ak to nieje male pismeno. Takze toto by fungovalo rovnako: Kód: int main(){ int ch; FILE *f; f = fopen ("vstup.txt", "r"); while ( (ch = fgetc(f)) != EOF ) { printf("%c", toupper(ch)); } fclose(f); return 0; }
Ale neskusal som, takze mozno som niekde spravil chybu.
|
|
Registrovaný: 15.07.13 Prihlásený: 27.05.18 Príspevky: 243 Témy: 42 |
a ako to spravím aby to zmenilo na veľké iba na začiatku vety?
_________________ PC: MB MSI 970A-G43 CPU AMD FX6300 6*3,50GHt turbo 4,1Ghz GPU Gigabyte r7 370 windforce oc edition 2GB Ram 8GB Kingston fury hyperx 1866Mhz SSD:Kingston SSDNow V300 120GB HDD:Seagete baracuda 1TB 7200rpm HDD2 Samsung HD502HJ 500GB 7200RPM PSU fortron hexa + 500W cpu chladič zalman CNPS5X Performa NOTEBOOK:HP Elitebook 8460p Tablet:Prestigio visconte Quad: Mobil: Microsoft Lumia 640 Dual sim
Auto:Chevrolet camaro 1986 IROC-Z |
|
Registrovaný: 28.04.11 Prihlásený: 26.04.24 Príspevky: 296 Témy: 27 Bydlisko: Martin/Brno | Napísal mitko: 25.03.2017 10:38 | |
|
Asi som zle pochopil zadanie. Mozes mi dat nejaky priklad vstupu a vystupu? Za bodkou menis vsetky pismena na velke, alebo iba prve?
|
|
Registrovaný: 15.07.13 Prihlásený: 27.05.18 Príspevky: 243 Témy: 42 |
Mám viaceré vety v súbore a všetko napísané malým a prvé písmeno na začiatku vety má byť veľké a všetko ostatné malé (teda veľké majú byť iba písmená po . ? ! a tiež iba prvé písmeno v prvej vete)
Vstup: toto je prva veta.toto je druha veta?toto je tretia veta?toto je posledna veta Výstup: Toto je prva veta.Toto je druha veta?Toto je tretia veta?Toto je posledna veta
_________________ PC: MB MSI 970A-G43 CPU AMD FX6300 6*3,50GHt turbo 4,1Ghz GPU Gigabyte r7 370 windforce oc edition 2GB Ram 8GB Kingston fury hyperx 1866Mhz SSD:Kingston SSDNow V300 120GB HDD:Seagete baracuda 1TB 7200rpm HDD2 Samsung HD502HJ 500GB 7200RPM PSU fortron hexa + 500W cpu chladič zalman CNPS5X Performa NOTEBOOK:HP Elitebook 8460p Tablet:Prestigio visconte Quad: Mobil: Microsoft Lumia 640 Dual sim
Auto:Chevrolet camaro 1986 IROC-Z |
|
Registrovaný: 28.04.11 Prihlásený: 26.04.24 Príspevky: 296 Témy: 27 Bydlisko: Martin/Brno | Napísal mitko: 25.03.2017 10:47 | |
|
Jaj jasne, to mi mohlo napadnut, nabuduce napis to zadanie trochu lepsie na zaciatku, idealne aj s nejakymi vstupmi aj vystupmi.
No to by nemalo byt take zlozite, proste citaj znaky, a ukladaj si informaciu o predchadzajucom znaku ci bol alebo nebol .!?.
V cykle rob tieto kroky: 1. Zisti ci bol predchadzajuci znak .!? ak ano vypis toupper(c) ak nie vypis c. 2. Zisti ci je aktualny znak .!? ak ano uloz do nejakej premennej true inak uloz false
Pred zaciatkom cyklu nastav tuto premennu na true aby si zmenil aj prvy znak na velke pismeno.
|
|
Registrovaný: 15.07.13 Prihlásený: 27.05.18 Príspevky: 243 Témy: 42 |
a ako si viem uložiť informáciu o predchádzajúcom znaku?
_________________ PC: MB MSI 970A-G43 CPU AMD FX6300 6*3,50GHt turbo 4,1Ghz GPU Gigabyte r7 370 windforce oc edition 2GB Ram 8GB Kingston fury hyperx 1866Mhz SSD:Kingston SSDNow V300 120GB HDD:Seagete baracuda 1TB 7200rpm HDD2 Samsung HD502HJ 500GB 7200RPM PSU fortron hexa + 500W cpu chladič zalman CNPS5X Performa NOTEBOOK:HP Elitebook 8460p Tablet:Prestigio visconte Quad: Mobil: Microsoft Lumia 640 Dual sim
Auto:Chevrolet camaro 1986 IROC-Z |
|
Registrovaný: 28.04.11 Prihlásený: 26.04.24 Príspevky: 296 Témy: 27 Bydlisko: Martin/Brno | Napísal mitko: 25.03.2017 11:00 | |
|
Kód: int koniecVety = 1; . . .
if (c == '.' || c == '!' || c == '?') { koniecVety = 1; } else { koniecVety = 0; }
. . .
|
|
Registrovaný: 15.07.13 Prihlásený: 27.05.18 Príspevky: 243 Témy: 42 |
to som pochopil len som to začal robiť iba pre otáznik a aj tak to nejde Kód: #include <stdio.h> #include <stdlib.h> #include <ctype.h>
int main() { FILE *f; int ch,t; f = fopen("vstup.txt", "r"); t=1; while( (ch = fgetc(f)) !=EOF){ if (ch == '?'){ t=1; printf("%c",toupper(ch)); } else{ t=0; printf("%c",ch); } } fclose(f); return 0; }
_________________ PC: MB MSI 970A-G43 CPU AMD FX6300 6*3,50GHt turbo 4,1Ghz GPU Gigabyte r7 370 windforce oc edition 2GB Ram 8GB Kingston fury hyperx 1866Mhz SSD:Kingston SSDNow V300 120GB HDD:Seagete baracuda 1TB 7200rpm HDD2 Samsung HD502HJ 500GB 7200RPM PSU fortron hexa + 500W cpu chladič zalman CNPS5X Performa NOTEBOOK:HP Elitebook 8460p Tablet:Prestigio visconte Quad: Mobil: Microsoft Lumia 640 Dual sim
Auto:Chevrolet camaro 1986 IROC-Z |
|
Registrovaný: 28.04.11 Prihlásený: 26.04.24 Príspevky: 296 Témy: 27 Bydlisko: Martin/Brno | Napísal mitko: 25.03.2017 11:12 | |
|
Ano toto nemoze prejst, pretoze ty robis toupper na otazniku. Musis tam mat dva ify Kód: while(..) { if(t == 1) { printf(toupper(c)) } else { printf(c) }
if (c == '.' || c == '!' || c == '?') { t = 1; } else { t = 0; } }
// Spojený príspevok Sob 25.03.17 11:20:12Dalo by sa pouzit aj to, ze si neukladas informaciu o tom ci to bol .!?. Ale rovno si ukladas predchadzajuci znak: Kód: char c; char previous = '.';
while(..) { if (previous == '.' .....) { printf(toupper) } else { printf(c) }
previous = c; }
Toto druhe riesenie je krajsie.
|
|
Registrovaný: 15.07.13 Prihlásený: 27.05.18 Príspevky: 243 Témy: 42 |
aháááááááááááááá už som pochopil ide to normálne si to lepšie vysvetlil ako môj profák s 4 titulmi Ďakujem veľmi pekne za pomoc
_________________ PC: MB MSI 970A-G43 CPU AMD FX6300 6*3,50GHt turbo 4,1Ghz GPU Gigabyte r7 370 windforce oc edition 2GB Ram 8GB Kingston fury hyperx 1866Mhz SSD:Kingston SSDNow V300 120GB HDD:Seagete baracuda 1TB 7200rpm HDD2 Samsung HD502HJ 500GB 7200RPM PSU fortron hexa + 500W cpu chladič zalman CNPS5X Performa NOTEBOOK:HP Elitebook 8460p Tablet:Prestigio visconte Quad: Mobil: Microsoft Lumia 640 Dual sim
Auto:Chevrolet camaro 1986 IROC-Z |
|
Registrovaný: 28.04.11 Prihlásený: 26.04.24 Príspevky: 296 Témy: 27 Bydlisko: Martin/Brno | Napísal mitko: 25.03.2017 11:21 | |
|
Nieje vobec zaco.
|
|
| Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|