|
Как из текстовой строки вытащить подстроку, после определенного шаблона? |
|
|
|
Sep 7 2017, 14:06
|
Знающий
   
Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247

|
Есть допустим строка: Код unsigned char HTTPStr[] = "setting.html?SSID=sd&PASSWORD=dsd&NOTE=sds"; Нужно вытащить из нее sd и dsd. Делаю так: Код int LeechPar(char* SrsBuf, char* Template, char* DestBuf)
{ int T = strstr((const char*)SrsBuf, Template) + (strlen(Template)); if(!T) {return 0;} int T1 = strstr((const char*)T,"&"); if(!T1) {return 0;} int T2 = T1 - T; if(T2 > 20){return 0;} memcpy(DestBuf, T, T2); DestBuf[T2] = 0; return T2; }
int main (void) {
char Buf[20];
//int T = strstr((const char*)HTTPStr,"SSID=") + 5; //int T1 = strstr((const char*)T,"&"); //memcpy(Buf, T, T1 - T); //Buf[T1 - T] = 0; int P = LeechPar(HTTPStr, "SSID=", Buf); printf("\n%s %d\n", Buf, P);
P = LeechPar(HTTPStr, "PASSWORD=", Buf); printf("\n%s %d\n", Buf, P);
} Какие могут быть подводные камни? И может быть есть способ проще?
Сообщение отредактировал Димон Безпарольный - Sep 7 2017, 14:16
|
|
|
|
|
 |
Ответов
|
Sep 7 2017, 15:02
|
Знающий
   
Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247

|
Если так, то что - то не получается: Код char ssid[20]; char pass[20]; sscanf(HTTPStr, "setting.html?SSID=[^&]&PASSWORD=[^&]", ssid, pass); printf("\n%s\n", ssid); Но идея хорошая. Это работает: Код #include <math.h> #include <stdio.h> #include <stdlib.h>
char *tokenstring = "first,25.5,second,15"; int result, i; double fp; char o[10], f[10], s[10], t[10];
void main() { result = sscanf(tokenstring, "%[^','],%[^','],%[^','],%s", o, s, t, f); fp = atof(s); i = atoi(f); printf("%s\n %lf\n %s\n %d\n", o, fp, t, i); }
|
|
|
|
|
Sep 7 2017, 16:34
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(scifi @ Sep 7 2017, 19:07)  Издеваетесь? У сканфа есть средства для этого. Лень в справочник заглянуть? Или вам надо предъявить все до последней запятой? Нет уж, увольте. Берегите нервы. Идея нормальная, реализация - увы. Цитата(Димон Безпарольный @ Sep 7 2017, 18:41)  Сломал голову, что такое с и чему оно равно в строке: Код char *src = strstr((const char*)SrsBuf, Template), c; Переменная типа char. Ничему не равна. Цитата(Димон Безпарольный @ Sep 7 2017, 18:41)  С исходной строкой: Код unsigned char HTTPStr[] = "setting.html?SSID=sd&PASSWORD=dsd&NOTE=sds"; Работает. А со строкой: Код unsigned char HTTPStr[] = "+IPD,0,471:GET /setting.html?SSID=5&PASSWORD=5 HTTP/1.1"; Уже нет. Так определитесь с критериями определения конца поля.
|
|
|
|
Сообщений в этой теме
Димон Безпарольный Как из текстовой строки вытащить подстроку Sep 7 2017, 14:06 scifi Кодsscanf(HTTPStr, "setting.html?SSID=... Sep 7 2017, 14:21  Димон Безпарольный Цитата(aaarrr @ Sep 7 2017, 19:09) Плохая... Sep 7 2017, 15:11   aaarrr Цитата(Димон Безпарольный @ Sep 7 2017, 18... Sep 7 2017, 15:17 Димон Безпарольный Некоторые убрал:
Кодunsigned char HTTPStr[... Sep 7 2017, 15:19 aaarrr Цитата(Димон Безпарольный @ Sep 7 2017, 18... Sep 7 2017, 15:29 Димон Безпарольный Сломал голову, что такое с и чему оно равно в стро... Sep 7 2017, 15:41 timurey Довольно простой парсер (взято отсюда: http://we.e... Sep 8 2017, 07:25
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|