Reverzace znaku v HTML souboru – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Reverzace znaku v HTML souboru – C / C++ – Fórum – Programujte.comReverzace znaku v HTML souboru – C / C++ – Fórum – Programujte.com

 

Bucta
~ Anonymní uživatel
5 příspěvků
21. 4. 2007   #1
-
0
-

Ahoj všem
Mám takovej problém s tím to prográmkem.Jedná se o program,který projde vstupní HTML soubor a vytvoří jeho kopii obsahující text všech sudých značek v obráceném pořadí,ale mám tady problém,ze mi to proste nebezi a vubec nevim proc!Dekuju za pomoc
Např. <ALESPON>něco<NECO>nebo<B>tučně<DALSI>
Vrátí: <ALESPON>něco<OCEN>nebo<B>tučně<ISLAD>
//---------------------------------------------------------------------------
#include <stdafx.h>
#include <vcl.h>
#include <string.h>
#include <stdio.h>

char *input="c:\\Documents and Settings\\Martin\\Dokumenty\\pokus1.htm";
char *ouput="c:\\Documents and Settings\\Martin\\Dokumenty\\bucta.htm";
// Does not work with html comments
// Does not work with nested items

int main(int argc, char* argv[])
{
FILE *fi=fopen(input,"rb"); // open the file
if(!fi)return 0; // stop on failiure
fseek(fi,0,SEEK_END); // go to the end
int len=ftell(fi); // length of the file
fseek(fi,0,SEEK_SET); // go back to the beginning

char *buf=new char[len+1]; // buffer for the input, one longer than the data
fread(buf,1,len,fi); // read the buffer
buf[len]=0; // make sure that the buffer is null-terminated
fclose(fi); // and close the file

fi=fopen(ouput,"w"); // open the file for writing
if(!fi)return 0; // stop on failiure
char *p;
int i;
for(i=0,p=strtok(buf,"<>");p; p=strtok(0,"<>"),i++) // split buf on < and >
{
if(i%2==0) // odd chunk must be <>
{ fputs("<", fi); // so put <
if(i%4)p=strrev(p); // if even in odds, that reverse
}
fputs(p,fi); // put the string
if(i%2==0)fputs("<", fi); // if odd close the >
}
fclose(fi); // and close the file
return 0;
}
//------------------------------------------------------------------------------

Nahlásit jako SPAM
IP: ...–
21. 4. 2007   #2
-
0
-

Huh, k cemu je to dobry 8-)

Nahlásit jako SPAM
IP: ...–
Bucta
~ Anonymní uživatel
5 příspěvků
22. 4. 2007   #3
-
0
-

To Zelenáč:Jo hochu to je moje uloha do skoly,ale mam s tim fakt problem!

Nahlásit jako SPAM
IP: ...–
Peter D.0
Expert
22. 4. 2007   #4
-
0
-

nejak som nepochopil čo to má robiť, keď môžeš uveď príklad. A napíš kde je chyba resp. akú píše kompilátor

Nahlásit jako SPAM
IP: ...–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
Jura
~ Anonymní uživatel
637 příspěvků
22. 4. 2007   #5
-
0
-

Nejak nechapu, co ti na tom nechodi, ale muzes zkusit tohle:



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

#define FILE_TO_READ "in.txt"
#define FILE_TO_WRITE "out.txt"

int main(int argc, char *argv[])
{
FILE *fr = fopen(FILE_TO_READ, "r"), *fw = fopen(FILE_TO_WRITE, "w");
if(!fr || !fw) return -1;
char buf[512], *pch;
int c = 0;
while(fgets(buf, 512, fr))
for(pch = buf; *pch;++pch)
{ if(*pch == '<') ++c;
if(*pch == '<' && c && c%2 == 0)
{ char *p = strchr(pch, '>');
if(!p) continue;
char buf[512];
strncpy(buf, pch+1, p-pch-1); buf[p-pch-1]='\0';
fprintf(fw,"<%s>", strrev(buf));
pch = p;
}
else
fprintf(fw,"%c", *pch);
}
fclose(fr);
fclose(fw);
system("PAUSE");
return 0;
}

Ale pozor, vzhledem k pouzitemu nacitani po radcich si to neporadi s vice radkovymi tagy. Pokud je to moc velka nevyhoda, tak si podobne jako vyse nahrad fgets alokovanim a nactenim celeho soubrou do pameti nebo to cti znak po znaku ze souboru.

Nahlásit jako SPAM
IP: ...–
Bucta
~ Anonymní uživatel
5 příspěvků
22. 4. 2007   #6
-
0
-

To Jura:Asi takhle nevim jak mam u toho svyho prikladu vyparovat vcl.:(

Nahlásit jako SPAM
IP: ...–
22. 4. 2007   #7
-
0
-

Bucta píše:#
# To Zelenáč:Jo hochu to je moje uloha do skoly,ale mam s tim fakt problem!


Asi vam zcvoknul ucitel...

Nahlásit jako SPAM
IP: ...–
Peter D.0
Expert
22. 4. 2007   #8
-
0
-

no niekedy dojdu ulohy tak su na rade taketo blbosti.

na konci ročníka mame robiť nejaku záverečnu prácu v C. Nemate niekto nejaky jednoduchy napad , ktory vizera zložito ? :)

Nahlásit jako SPAM
IP: ...–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
Jura
~ Anonymní uživatel
637 příspěvků
22. 4. 2007   #9
-
0
-

To Bucta:
VCL knihovna je veci borlandu, tudiz pokud to prekldas pod gcc, nebo jakymkoliv jinym prekladacem, tak se neni cemu divit, ze kompilator nezna vcl.h. A reseni? Smaz ten radek(kdyby jsi nevedel: #include <vcl.h>)

Nahlásit jako SPAM
IP: ...–
Bucta
~ Anonymní uživatel
5 příspěvků
23. 4. 2007   #10
-
0
-

To Jura:Cus budes se divit,ale fakt mi to nejde ani po tom co jsem vymaza #include <vcl.h>.Mohl by jsi to prosím zkusit ty??

Nahlásit jako SPAM
IP: ...–
23. 4. 2007   #11
-
0
-

mephi píše:#
# no niekedy dojdu ulohy tak su na rade taketo blbosti.#
##
#na konci ročníka mame robiť nejaku záverečnu prácu v C. Nemate niekto nejaky jednoduchy napad , ktory vizera zložito ? :)


Stahnout linux a CTRL+C ;-)

Nahlásit jako SPAM
IP: ...–
Peter D.0
Expert
23. 4. 2007   #12
-
0
-

nemyslel som až take jednoduche :D

Nahlásit jako SPAM
IP: ...–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
Jura
~ Anonymní uživatel
637 příspěvků
23. 4. 2007   #13
-
0
-

Kdyz ti delalo problemy zkompilovat tohle reseni, tak proc jsi neupravil a nepouzil me??



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

char *input="c:\\Documents and Settings\\Martin\\Dokumenty\\pokus1.htm";
char *ouput="c:\\Documents and Settings\\Martin\\Dokumenty\\bucta.htm";
// Does not work with html comments
// Does not work with nested items

int main(int argc, char* argv[])
{
FILE *fi=fopen(input,"rb"); // open the file
if(!fi)return 0; // stop on failiure
fseek(fi,0,SEEK_END); // go to the end
int len=ftell(fi); // length of the file
fseek(fi,0,SEEK_SET); // go back to the beginning

char *buf= (char*)malloc(sizeof(char)*(len+1));//new char[len+1]; // buffer for the input, one longer than the data
fread(buf,1,len,fi); // read the buffer
buf[len]=0; // make sure that the buffer is null-terminated
fclose(fi); // and close the file

fi=fopen(ouput,"w"); // open the file for writing
if(!fi)return 0; // stop on failiure
char *p;
int i;
for(i=0,p=strtok(buf,"<>");p; p=strtok(0,"<>"),i++) // split buf on < and >
{
if(i%2==0) // odd chunk must be <>
{ fputs("<", fi); // so put <
if(i%4)p=strrev(p); // if even in odds, that reverse
}
fputs(p,fi); // put the string
if(i%2==0)fputs("<", fi); // if odd close the >
}
fclose(fi); // and close the file
free(buf);
return 0;
}

Nahlásit jako SPAM
IP: ...–
Bucta
~ Anonymní uživatel
5 příspěvků
26. 4. 2007   #14
-
0
-

Chtěl jsem se ještě zeptat šla by funkce Strtok a strlev nahradit jinou funkcí????

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 28 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý