Преобразовать строку int и float в массив float в C

то, что я пытаюсь сделать, это отправить строку по сети. Дело в том, что сервер, который получает строку, должен сделать сумму всех чисел и отправить ее обратно. поэтому я думаю, что самый простой способ - взять строку и поместить ее в массив с плавающей точкой (неважно, входят ли там ints, так как окончательная сумма будет числом с плавающей запятой).

к сожалению, я понятия не имею, как это сделать или, точнее, как подойти к нему. как я беру числа 1 на 1 из строки (скажем, каждое число разделяется пробелом)? должна быть какая-то функция, но я не могу ее найти.

язык является простым C в unix.

4 ответа

Используйте strtod() чтобы преобразовать первое число в строке, чтобы ******. Добавьте это к своей сумме, затем используйте endptr возвращаемого значения endptr чтобы выяснить, нужно ли преобразовать другое, и если да, откуда. Итерация до тех пор, пока вся строка не будет обработана.

Прототипом для strtod() является:

****** strtod(const char *nptr, char **endptr);

Также обратите внимание, что при обработке целых чисел с плавающей запятой вы можете столкнуться с проблемами точности.


Вы можете использовать fscanf для чтения из потока, так же, как вы бы использовали scanf для чтения из stdin.


Вы можете использовать strtok для разделения строки и atof чтобы преобразовать ее в float.

char* p;
float farr[100];
int i = 0;
//str is your incoming string
p = strtok(str," ");
while (p != NULL)
{
 farr[i] = atof(p);
 p = strtok(NULL, " ");
}

Я просто запускал его в онлайн-компиляторе - http://ideone.com/b3PNTr


вы можете использовать sscanf() для чтения форматированного ввода из строки. вы можете использовать что-то вроде

string=strtok(input," ")
while(string!=NULL)
{ sscanf(string,"%f",&a[i]);
 i++;
string=strtok(NULL," ");
}

внутри циклы. вы можете использовать даже atof() вместо использования sscanf() с% f.

licensed under cc by-sa 3.0 with attribution.