Ziskanie hodnoty z retazca

C,C++,C#

Moderátori: psichac, Moderátori

bebeno28
Stály člen
Stály člen
Príspevky: 204
Dátum registrácie: 16 Sep 2012, 21:34
Bydlisko: Trnava

Ziskanie hodnoty z retazca

Príspevok od používateľa bebeno28 » 20 Júl 2017, 21:28

Ahojte.

Prosím Vás viete mi niekto poradit ako získam z retazca znakov pozadovanú hodnotu a previest ju na integer?

Píšem si kod v Arduino prostredí a neviem prísť ako ked príjmem String v tvare GET /58 HTTP/1.1 ako z toho viem dostat ciselnu hodnotu za lomítkom ?
Císlo bude vzdy od 0 po 100 .
Samozrejme potom to previest na Integer.

Dakujem
0

hen
Okoloidúci
Okoloidúci
Príspevky: 4
Dátum registrácie: 12 Dec 2016, 22:39
Bydlisko: BA

Re: Ziskanie hodnoty z retazca

Príspevok od používateľa hen » 20 Júl 2017, 23:16

neotestoval som to, takže sa tam možno nájdu chyby, skôr ako inšpirácia jedného z riešení...
Číslo za lomítkom sa musí začínať na pozícii 5, čiže sa predpokladá že reťazec bude vždy v tvare "GET /..."

Kód: Vybrať všetko

String str = "GET /58 HTTP/1.1";
int base = 1;
int result = 0;

for(int i=7; i>4; i--)
{
	char digit = str.charAt(i);
	if(digit>='0' && digit<='9')
	{
		result = result+base*(digit-'0');
		base=base*10;
	}
}
Serial.print(result);
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: Ziskanie hodnoty z retazca

Príspevok od používateľa jirka.jirka. » 21 Júl 2017, 10:58

Vyzkoušeno a funkční:

Proměnou potom najdeš v hodnotě cislo

EDIT: ještě jsem to trošku upravil. Vymazal jsem sprintf, přidal podle čeho to parsovat. AŤ se ta funkce dá použít i jinde.

Jinak doplním. Testováno a odladěno zde: https://codepad.remoteinterview.io

Kód: Vybrať všetko

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
 
char string[] = "GET /10 HTTP/1.1";

/*Funkce, ktera provede extrakci dat z retezce*/
/*Velice jednoduse reseno*/
int dataven(char prikaz[], char *data[], char podleceho[])
{
    char *ch; //promenna pointer
    int i=0;
    
    ch = strtok(string, podleceho);    //najde prvni oddelovac a nahradi ho \0, dale se najde zacat umisteni retezce (adresa)
    
    while (ch != NULL) 
    {
        //printf("%s\n", ch);
        ch = strtok(NULL, podleceho);    //nyni najde dalsi oddelovac a jeho adresu umisti do ch, potom se vypise, atd, atd az do zblbnuti
        data[i++] = ch;   
        i++;
    }
}

int main() {
    char *data[80];    //vystupni data
    char rozdel[] = " /";
    dataven(string, data, rozdel); //funkce pro extrakci dat
    
    int cislo = atoi(*data);    //konverze string to int
    printf("%d", cislo);    //no a uu enom vypis, ze to funguje
    
    return 0;
}
Prílohy
output.JPG
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: Ziskanie hodnoty z retazca

Príspevok od používateľa jirka.jirka. » 21 Júl 2017, 12:56

A Eclipse taktéž souhlasí. :-) Ono zde taky není nic, co by nemělo fungovat. Určitě se tato funkce bude hodit i jiným.

EDIT: Jenom se musím omluvit, až teď jsem si všiml, že to je pro arduino. Proto mě prosím nebijte, ale nechám to tu, třeba už jenom pro pochopení. :)
0

bebeno28
Stály člen
Stály člen
Príspevky: 204
Dátum registrácie: 16 Sep 2012, 21:34
Bydlisko: Trnava

Re: Ziskanie hodnoty z retazca

Príspevok od používateľa bebeno28 » 22 Júl 2017, 21:48

Dakujem páni za reakciu. musim si to rozkodovat riadok po riadku aby som pochopil co to robi ja som v Ckode a Arduine zaciatocnik.

Inak asi som sa unahlis pretoze v konecnom dosledku bude ten link troska iny a vlastne budu dva tipy. napadla ma este jedna funkcia pre moj projekt ktorou to chcem vylepsit tak pred premenou bude este bude /value= alebo /set= a az potom bude hodnota ktoru budem potrebovat . ale to aby asi nemalo vadit. Tam si len zemni asi hodnoty aby som kontroloval ine znaky s Stringu. Teda ak chapem o co tu vlastne ide.

Dakujem
0

bebeno28
Stály člen
Stály člen
Príspevky: 204
Dátum registrácie: 16 Sep 2012, 21:34
Bydlisko: Trnava

Re: Ziskanie hodnoty z retazca

Príspevok od používateľa bebeno28 » 26 Júl 2017, 17:17

Tak prisiel som na to ako to spravit v Arduine.

Toto je moj kod na ziskanie hodnoty zo Stringu.
Prílohy
Capture.JPG
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok