Вначале найти нужный пробел через цикл и уже от него искать завершающий. Потом взять часть строки между пробелами.
Я имел ввиду что-то типа функции “strtok”. А так очень…Вначале найти нужный пробел через цикл и уже от него искать завершающий. Потом взять часть строки между пробелами.
Язык С под Arduino. Я имел ввиду что-то типа функции “strtok”.Язык программирования какой?
/************************************************************************************/
/*
getHostName()
Returns host name from URL
NOTE:
- for example we have url "yyyyyyy.com:80/ccccccc.mp3"
then "yyyyyyy.com" will be returned
*/
/************************************************************************************/
String getHostName(String urlAddress)
{
int16_t position = 0;
position = urlAddress.indexOf("/"); //search for "/" extension separetion simbol simbol in the url
if (position > 0)
{
urlAddress = urlAddress.substring(0, position); //host name without extension
position = 0; //clear position
}
position = urlAddress.indexOf(":"); //search for ":" port separetion simbol in the url
if (position > 0)
{
urlAddress = urlAddress.substring(0, position); //host name without port number
}
return urlAddress;
}
float *get_float_by_index(const String& text, int index) {
static float f;
float *result = 0;
int pos, start;
for (start = 0; index >= 0 && start < text.length(); index--) {
if ((pos = text.indexOf(' ', start)) >= 0) {
if (index == 0 && pos > start) {
f = text.substring(start, pos).toFloat();
result = &f;
}
start = pos + 1;
} else {
if (index == 0 && start < text.length() - 1) {
f = text.substring(start).toFloat();
result = &f;
}
break;
}
}
return result;
}
void setup() {
Serial.begin(115200);
delay(100);
Serial.println();
String s = "1238 123.45 12.28 1034 132.45 0.328 14.77 66.34 0.884";
float* f;
int index = 0;
while ((f = get_float_by_index(s, index++)) != 0) {
Serial.print(index - 1);
Serial.print(" - ");
Serial.println(String(*f, 3));
}
}
про strtok я просто не вспомнил потому как он немножко не threadsafe но тут это совсем не актуальноЯзык С под Arduino. Я имел ввиду что-то типа функции “strtok”.
#include <string.h>
#include <mem.h>
float *get_float_by_index(const String& text, int index) {
static float f;
float *result = 0;
if (text.length() > 0) {
char *str = (char*)malloc(text.length() + 1);
strcpy(str, text.c_str());
for (char* p = strtok(str," "); p != 0 && index >= 0; p = strtok(0, " "), index--) {
if (index == 0) {
f = String(p).toFloat();
result = &f;
}
}
free(str);
}
return result;
}
float *get_float_by_index(const String& text, int index) {
int begin = 0; int next = text.length() ;
while (next>1 ) {
next=text.indexOf(' ', begin );
index--; if (index==0) return text.substring(begin,next).toFloat();
begin=next+1;
}
return 0;
}
return text.substring(begin,next).toFloat();
if (index==0) return text.substring(begin,next).toFloat();
^
cannot convert 'float' to 'float*' in return
понятие не имею так как не пишу на дурине.не понятно как это должно работать?Код:if (index==0) return text.substring(begin,next).toFloat(); ^ cannot convert 'float' to 'float*' in return
каким образом преобразовать к указателю значение float расположенное в стеке?
string get_strfloat_by_index(const String& text, int index) {
int begin = 0; int next = text.length() ;
while (next>1 ) {
next=text.indexOf(' ', begin );
index--; if (index==0) return text.substring(begin,next);
begin=next+1;
}
return "";
}