Jak odczytać tablicy char z odebranego pakietu http
http 1.1 302 moved temporarily
liczbe 302 do int ??
Jak odczytać tablicy char z odebranego pakietu http
http 1.1 302 moved temporarily
liczbe 302 do int ??
#include
#include
#include
#include
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int i=0, liczba=0;
const int WIERSZ=6, KOLUMNA=25;
char str[] = "http 1.1 302 moved temporarily";
char temp[WIERSZ][KOLUMNA];
char* pch = NULL;
char* context = NULL;
pch = strtok_s(str, " ", &context);
strcpy_s(temp[i++], KOLUMNA, pch);
while(i
{
pch = strtok_s(NULL, " ", &context);
if(pch == NULL) {break;}
else{
strcpy_s(temp[i++], KOLUMNA, pch);
}
}
liczba = atoi(temp[2]);
cout << liczba << "\n";
return 0;
}
kod dla C++ w Visual 2008 EE
troche prosciej przy użyciu standardowych funkcji C
#include
#include
int main ()
{
char str[] ="http 1.1 302 moved temporarily";
char * wsk = 0;
short liczba = 0;
wsk = strtok(str," ");
while (wsk != NULL && liczba < 2)
{
++liczba;
wsk = strtok (NULL, " ");
}
liczba = atoi(wsk);
printf("liczba: %d", liczba);
getchar();
return 0;
}
Lub już typowo w C++
#include
#include
#include
int main(int argc, char *argv[])
{
char str[] ="http 1.1 302 moved temporarily";
short liczba;
stringstream bufor;
string napis(str), pomin;
bufor << napis;
bufor >> pomin >> pomin >> liczba;
cout<
cin.sync();
cin.get();
return 0;
}
Niestety ten kod nie będzie działał prawidłowo, dlatego że ‘wsk’ zawsze będzie pokazywał ostatni wyraz z tej tablicy, czyli “temporarily”. Dodatkowo użycie zmiennej “liczba” w pętli ‘while’ będzie niepotrzebne.
W moim kodzie po całej pętli, każdy wyraz będzie w osobnym wierszu 2-wymiarowej tablicy, co ułatwia sprawę.
Użyłem funkcji “strcpy_s” (podobnie jak strtok_s) a nie “strcpy” ze względu na to: warning C4996: ‘strcpy’: This function or variable may be unsafe. Consider using strcpy_s instead.
UWAGA!! Poprawiłem nieco swój kod Teraz powinien śmigać idealnie
@dobryteddy Po pierwsze po co miałbym umieszczać kod który nie działa prawidłowo ? (widzę że nawet go nie kompilowałeś skoro twierdzisz że nie działa ). Po drugie @schwarze.witwe pisze że chce odczytać z tak uformowanego stringa wartość która znajduje się na pozycji trzeciej, to znaczy nie interesuje go reszta powiadomienia. Co za tym idzie po co tworzyć do tego tablice marnując pamięć :lol: ?
No fakt, nie przyjrzałem się za bardzo. Tak to jest jak się koduje w nocy
Z tym marnowaniem pamięci to bym nie przesadzał, przecież dzisiaj standardem są 4 giga, to nie kiedyś że pamięć liczyło się w kilobajtach Chyba, że komuś mocno na tym zależy. Mój przykład działa na ogólnym przypadku i faktycznie jeżeli komuś nie zależy na reszcie powiadomienia to faktycznie twój kod będzie lepszy
#include
#include
#include
int main(int argc, char *argv[])
{
char str[] ="http 1.1 302 moved temporarily";
short liczba;
stringstream bufor;
string napis(str), pomin;
bufor << napis;
bufor >> pomin >> pomin >> liczba;
cout<
cin.sync();
cin.get();
return 0;
}
Nie działa wywala błąd:
`stringstream' undeclared (first use this function)