Prace s retezci – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Prace s retezci – C / C++ – Fórum – Programujte.comPrace s retezci – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
marc_ramin
~ Anonymní uživatel
23 příspěvků
29. 10. 2008   #1
-
0
-

cus,
nej tak jsem si ve volne chvilce zkusil neco naprogramovat a zjistil jsem, ze moc netusim jak to ma c s retezci. mam neco jako:

char doc[]="<html><head><title>ensplorer</title></head><body></body></html>";

char title[];
int i=0;
int j=0;
while((doc[i]!='<') and (doc[i+1]!='t') and (doc[i]!='i') and (doc[i]!='t') and (doc[i]!='l') and (doc[i]!='e') and (doc[i]!='>')){
i++;}
i=i+7;
while(doc[i]!='<'){
title[j]=doc[i];
i++;
j++;}

retezec ze ktereho chci vytahnout text mezi <title> a </title>. tohle mi ale pise chybu v syntax pred while a o redefinici i. kdyz jsem se kouknul na nejaky tutory, vsude se kopirujou jenom cele retezce. v phpku je to pohoda, ale nevi nekdo o nejakym textu, ktery by mi pomohl?
dik

Nahlásit jako SPAM
IP: 86.49.37.–
Reklama
Reklama
crAzY^
~ Moderátor
+10
Grafoman
29. 10. 2008   #2
-
0
-

To marc_ramin : nemelo by v te podmince while byt doc[i+2], doc[i+3]. oprav mě pokud se mýlím

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
MaS0
Návštěvník
29. 10. 2008   #3
-
0
-

To crAzY^ : asi by to mělo být

myslim, že taky jde použít funkci search() (z STL).... což je podle mě lepší řešení

Nahlásit jako SPAM
IP: 195.146.114.–
marc_ramin
~ Anonymní uživatel
23 příspěvků
29. 10. 2008   #4
-
0
-

To crAzY^ : jo, to samozrejme ma byt... taky je, jenom jsem sem asi dal spatnou verzi :smile12: ; no ale ani tak to nefunguje a hazi to furt ty sami hlasky. nejakej ten tutor by nebyl? to by bylo jrdnodussi. dik

Nahlásit jako SPAM
IP: 86.49.37.–
MaS0
Návštěvník
29. 10. 2008   #5
-
0
-

nechci se vnucovat, ale proč nepoužít to, co už je vytvořený?

#include <iostream>

#include <algorithm>

using namespace std;
int main()
{
char doc[]="<html><head><title>ensplorer<\title></head><body></body></html>";
char title[]="<title>";
char aa[]="<";
char *a;
char *b;
int lendoc=sizeof(doc)/sizeof(char)-1;
int lentitle=sizeof(title)/sizeof(char)-1;
a=search(doc, doc+lendoc, title, title+lentitle);
if (a!='\0')
b=search(a+lentitle, doc+lendoc, aa, aa+sizeof(char));
if (b!= doc+lendoc and b!='\0')
for (int i=lentitle ;(a+i)!=b;i++)
cout << *(a+i);

cin.get();
cin.get();
return 0;
}


je to sice trochu chaotický, ale search se podle mě k tomuto příkladu hodí.
serch:http://www.cplusplus.com/reference/algorithm/search.html

Nahlásit jako SPAM
IP: 195.146.114.–
czbero0
Stálý člen
30. 10. 2008   #6
-
0
-

To marc_ramin : No, syntax error ti to asi vypisuje kvůli tomu, že v C++ se AND (bitový součin) vyjadřuje pomocí &&

Nahlásit jako SPAM
IP: 62.240.178.–
http://moddb.com/mods/police-brutality/
jouda
~ Anonymní uživatel
53 příspěvků
30. 10. 2008   #7
-
0
-

To marc_ramin :

zdravim.....opravil bych to asi takhle....

char doc[]="<html><head><title>ensplorer</title></head><body></body></html>";

char title[]; // chybi velikost pole - tento zapis se muze pouzit pouze je-li pole ihned inicializovano jako je pouzito vyse
// bud nastavit "natvrdo" nebo alokovat dynamicky

int i=0;
int j=0;

//podminka and se zapisuje takto....
while((doc[i]!='<') && (doc[i+1]!='t') && (doc[i]!='i') && (doc[i]!='t') && (doc[i]!='l') && (doc[i]!='e') && (doc[i]!='>'))
{
i++;
}

i=i+7;

while(doc[i]!='<')
{
title[j]=doc[i]; //neopravneny pristup k poli title - nezadana velikost....
i++;
j++;
}

//jak jiz bylo napsano vyse, je tam jeste logicka chyba doc[i+2]!='i' atd....

Nahlásit jako SPAM
IP: 212.20.106.–
marc_ramin
~ Anonymní uživatel
23 příspěvků
30. 10. 2008   #8
-
0
-

dekuji za zatim zaslane napady a pripominky, ale:
kod je takhle a byl tak uz i predtim(hodnekrate jsem ho upravoval abych zjistil jestli nejaky zapis nahodou nefunguje)

char doc[]="<html><head><title>ensplorer</title></head><body></body></html>";

char title[128];
int i=0;
int j=0;
while((doc[i]!='<') && (doc[i+1]!='t') && (doc[i+2]!='i') && (doc[i+3]!='t') && (doc[i+4]!='l') && (doc[i+5]!='e') && (doc[i+6]!='>')){
i++;}
i=i+7;
while(doc[i]!='<'){
title[j]=doc[i];
i++;
j++;}

a k tomu search(), neni to fce jenom pro c++? ja delam jenom v pure c(mam rad cisty a prehledny kod). jinak dik za komenty

Nahlásit jako SPAM
IP: 86.49.37.–
crAzY^
~ Moderátor
+10
Grafoman
30. 10. 2008   #9
-
0
-

To marc_ramin : i C++ má přehledný kód :) teda když se umí psát

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
MaS0
Návštěvník
30. 10. 2008   #10
-
0
-

To czbero : logické "A" lze napsat buď jako &&, ale i and........takže v tom podle mě nebylo.

Nahlásit jako SPAM
IP: 195.146.114.–
jouda
~ Anonymní uživatel
53 příspěvků
30. 10. 2008   #11
-
0
-

To marc_ramin :

asi bych to prepsal takhle....

char doc[]="<html><head><title>ensplorer</title></head><body></body></html>";
char title[128];
bool nalezeno = false;
int i=0;
int j=0;

int delka = strlen(doc);

while (i <= delka-6)
{
if ((doc[i]=='<') && (doc[i+1]=='t')
&& (doc[i+2]=='i') && (doc[i+3]=='t')
&& (doc[i+4]=='l') && (doc[i+5]=='e')
&& (doc[i+6]=='>'))
{
nalezeno = true;
break;
}
else
{
i++;
}
}

if (nalezeno == true)
{
i=i+7;

while(doc[i]!='<')
{
title[j]=doc[i];
i++;
j++;
}
}

Nahlásit jako SPAM
IP: 212.20.106.–
jouda
~ Anonymní uživatel
53 příspěvků
30. 10. 2008   #12
-
0
-

To MaS :

ja teda nevim kde si na to prisel, ale podle me zna C a C++ pro logicky soucin pouze operator &&.

Nahlásit jako SPAM
IP: 212.20.106.–
o-lox0
Super člen
30. 10. 2008   #13
-
0
-

Je mi trochu divné že tu nikdo doposud nepoužil pro hledání výskytu jednoduššího strstr(retezec,podretezec) ze string.h

Nahlásit jako SPAM
IP: 85.71.152.–
ondra
~ Anonymní uživatel
236 příspěvků
30. 10. 2008   #14
-
0
-

To jouda :

Operátor and je v C++ ekvivalentem &&. Je to zcela standardní záležitost (i když jsem to moc použité nikde neviděl). V některých překladačích se to musí extra zapnout, ale to není chyba C++. Je možné např. přetížit operátor && a pak ho používat jako and nebo obráceně. Nevím sice, k čemu je toto rozdvojení dobré, ale to je jiná věc.

Nahlásit jako SPAM
IP: 194.138.12.–
MaS0
Návštěvník
30. 10. 2008   #15
-
0
-
Nahlásit jako SPAM
IP: 195.146.114.–
jouda
~ Anonymní uživatel
53 příspěvků
30. 10. 2008   #16
-
0
-

To ondra : Jo tak to bude ono s tim zapinanim, obcas se mi kvuli stridani pascal / c++ stalo ze jsem v c++ and pouzil,ale vzdycky na me prekladac hulakal.....

Nahlásit jako SPAM
IP: 212.20.106.–
marc_ramin
~ Anonymní uživatel
23 příspěvků
5. 11. 2008   #17
-
0
-

To marc_ramin : uz jsem z toho docela na prasky... dla jsem si pauzu a zacal jsem od zacatku, jednoduse. mam tohle:

#include <stdio.h>

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

int main(int argc, char *argv[]){
char *doc="<html><head><title>ensplorer</title></head><body></body></html>";
char *title;
char *zacatek="<title>";
char *konec="</title>";
int i=0;
int j=0;

i=strstr(doc, zacatek);
i=i+7;
j=strstr(doc, konec);
while(i!=(j-1)){
title[j]=doc[i];
i++;
j++;}

printf("%s", title);
getchar();
}

ale zase mi to hazi na tech radkach se strstr varovani o tom, ze z ukazatele delam integer... uz jsem v koncich a opravdu nevim... tutor jsem zadnej poradnej nenasel a vic napadu uz nemam.

Nahlásit jako SPAM
IP: 86.49.37.–
o-lox0
Super člen
5. 11. 2008   #18
-
0
-

Tak pracuj s i,j jako s řetězci
char *i,*j;
...
strncpy(title,i,j-i); // misto while
...
taky bys mel overovat ze to i neni NULL!! Inicializovat title=new char[100]; // resp. malloc v C
nemam cas to zkouset..

Nahlásit jako SPAM
IP: 85.71.152.–
MaS0
Návštěvník
5. 11. 2008   #19
-
0
-

přesně, jak řikal o-lox, tady kód jak radil on....

#include <stdio.h>

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

int main(int argc, char *argv[]){
char *doc="<html><head><title>ensplorer</title></head><body></body></html>";
char *title=new char[100];
*title='\0';
char *zacatek="<title>";
char *konec="</title>";
char *i=0;
char *j=0;

i=strstr(doc, zacatek);
j=strstr(doc, konec);
if (i!='\0' and j!='\0') {
i=i+7;
strncpy(title, i, j-i);
}
printf("%s", title);
getchar();
}
funguje.....na tu inicializaci title, bys neměl zapomínat, protože pak program ani nejde spustit...

Nahlásit jako SPAM
IP: 195.146.114.–
marc_ramin
~ Anonymní uživatel
23 příspěvků
9. 11. 2008   #20
-
0
-

nasel jsem si starej crawler v phpku a snazil jsem se ho jenom prepsat do cecka, ale ani to se mi nepovedlo. hledal jsem tedy alespon nejakou referencni prirucku jazyka, nasel jsem ale jenom jednu dosti nedostatecnou. existuji v cecku fce ereg, strpos a substr? doufal jsem, ze prechod z php na c bude jednoduchy, ale osklive jsem se spletl...

Nahlásit jako SPAM
IP: 89.176.104.–
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, 85 hostů

Moderátoři diskuze

 

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