Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите плиз!!!! преобразование стринга в float 
:(
    Опции темы
Matrixon
  Дата 17.2.2005, 03:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 17.2.2005

Репутация: нет
Всего: нет



Всем програмерам салют !!!
помогите начинающему програмисту плиз smile

тема такая:
есть стринг

149.54 -28.12 309.32 (3 числа)

между числами один пробел... это все как я уже говорил - один стринг.

вопрос:
Как я могу найти самое большое число (в математическом понятии) smile
ведь это же не float ?!

может можно както преобразовать char в float ili double smile ?

помогите кто чем может


за ранее благодарен
PM MAIL   Вверх
Borisff2003
Дата 17.2.2005, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 26.2.2004
Где: г. Уфа

Репутация: 1
Всего: 1



Код

char str[]="149.54 -28.12 309.32";
float f1,f2,f3;
sscanf(str,"%f %f %f",&f1,&f2,&f3);

--------------------
Лень, двигатель прогресса
PM MAIL WWW ICQ   Вверх
Matrixon
Дата 17.2.2005, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 17.2.2005

Репутация: нет
Всего: нет



спасибо Borisff2003 !

наверно я не правильно задал вопрос , сорри...
на самом деле дело обстоит так :

1.
есть стринг " The sum of 234.193 and -28.67 is 205.523"
( стринг может быть любого размера и с любым колличеством букв и цифр)

2.
Нужно вытащить все цифровые значения и из них найти самое большое

т.е то что ты предложил , делать нельзя так как не известно колл-во чисел ....

есть предложения ?
smile

сэнкс
PM MAIL   Вверх
Borisff2003
Дата 17.2.2005, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 26.2.2004
Где: г. Уфа

Репутация: 1
Всего: 1



Код

#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
char str[]="The sum of 234.193 and -28.67 is 205.523";
float f1,f2,f3;
char *p;
char s[100];
p=str;
float i;
while(1)
{
sscanf(p,"%s",s);
i=atoа(s);
if(i)
{
              //чтото  делаем только нули так не прочитаешь  :(
}
p=strchr(p,' ');
if(!p)
 break;
p++;
}
}


Это сообщение отредактировал(а) Borisff2003 - 17.2.2005, 13:29
--------------------
Лень, двигатель прогресса
PM MAIL WWW ICQ   Вверх
pablo
Дата 17.2.2005, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

Репутация: 4
Всего: 6



ребята, не изобретайте колесо. Юзаите функцию strtod библиотеки <stdlib.h>


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
Borisff2003
Дата 17.2.2005, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 26.2.2004
Где: г. Уфа

Репутация: 1
Всего: 1



Цитата

Юзаите функцию strtod


Угу, тады чуть полкгче будет smile
--------------------
Лень, двигатель прогресса
PM MAIL WWW ICQ   Вверх
pablo
Дата 17.2.2005, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

Репутация: 4
Всего: 6



советую описание просмотреть. нет так просто её юзать !!!


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
Matrixon
Дата 17.2.2005, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 17.2.2005

Репутация: нет
Всего: нет



а можно это дело без указателей сделать ? smile


PM MAIL   Вверх
Borisff2003
Дата 17.2.2005, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 26.2.2004
Где: г. Уфа

Репутация: 1
Всего: 1



pablo ты вроде как сам с собой спорить начал smile

А строка сама по себе есть указатель (то что ты обозвал стрингом), но если хочешь, то можно полезть например в STL, там без указателей можно.
--------------------
Лень, двигатель прогресса
PM MAIL WWW ICQ   Вверх
pablo
Дата 17.2.2005, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

Репутация: 4
Всего: 6



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

На это я хотел вас насторожить smile


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
Doc_d0s
Дата 17.2.2005, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 15.12.2004
Где: в кресле

Репутация: 2
Всего: 3



Вот тебе код(сам писал):
Код

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>

int matrixEnter(char *a, const int n,char s[]);

const n=80;
int main()
{
   system("cls");
char *a=new char[n];
char num[n];
double sum=0,c1=0,c=0;
 int x=matrixEnter(a,n,"C:\\users\\in.txt");
 for (int j=0,k=-1;j<x;j++)
 {
  if((*(a+j)>=48 && *(a+j)<= 57)||*(a+j)=='-'||*(a+j)=='.')//поиск символа в строке
  {
 
  if(k==-1)//если нет ни одного символа в массиве, то
   {
    if(*(a+j)=='.' ) // если это '.', то не записываем и читаем новый символ
    {
     continue;
    }
    if(*(a+j)=='-' && (*(a+j+1)<48 || *(a+j+1)>57 || *(a+j+1)=='.'))//если после "-" стоит не цифра , то её не печатаем, а..
    {
      num[0]='\0';
      continue;
    }


   }
  else
   {
   if(*(a+j)=='-') // ..ищем '-' после цифры
    {//если да то:
     num[0]='\0';
     k=-1;
     continue;
    }
  //////////////////////////////////////////////////////////////////////////////////////  
   
   if(c>1 &&*(a+j)!='.')//если в массиве есть хотя бы один элемент, а в числе есть точка и текущий символ "."
    {
     num[0]='\0';//обнуляем строку
     k=-1;
     c=0;
     continue;

    }
   if(c1>1 &&*(a+j)!='-')//если в массиве есть хотя бы один элемент, а в числе есть точка и текущий символ "."
    {
     num[0]='\0';//обнуляем строку
     k=-1;
     c1=0;
     continue;

    }
   
    if(*(a+j)=='.' && ((*(a+j+1)<48 || *(a+j+1)>57 || *(a+j+1)=='-') || *(a+j+1)=='-' || *(a+j-1)=='-'))//если после "." стоит не цифра и не минус, то её не печатаем, а..
    {
      num[k+1]='\0';// заканчиваем строку
      printf("%s\t",num);//печатаем
      sum=sum+atof(num);// суммируем
      num[0]='\0';//обнуляем строку
      k=-1;
      c=-1;
      continue;
    }
   
   }
   
   if(k==-1 && *(a+j-1)=='.')
    continue;
   k++;
   num[k]=*(a+j);
   if(*(a+j)=='-')
    c1++;

   if(*(a+j)=='.')
   {
    c++;
   }
   
  }
  else
  {
   num[k+1]='\0';
   printf("%s\t",num);
   sum=sum+atof(num);
   num[0]='\0';
   k=-1;
   c=-1;
  }
 }
 printf(" \nSum is %lf\n",sum);
 getch();
 return 0;
}
int matrixEnter(char *a, const int n,char s[])
{
FILE *f;
int i=0;
 if((f=fopen(s,"r"))!=NULL)
 {

  while(i<=n-1 && !feof(f))
  {
   *(a+i)=fgetc(f);
   printf("%c",*(a+i));
   i++;
  }
  *(a+i)='\0';
  printf("\n");
  fclose(f);
 }
 else
 {
  printf("!!!ERROR!!! \nFile %s not found\n",s);
  exit(0);
 }
return i;
}

он мудреный, если попадется число 1.2.3 он сделает из него 1.2 и 3, а если 1-2-3 1, -2 и -3
вот так smile
Тут не совсем то что тебе надо, тут я ищу сумму, ну а как найти максимум это твое дело может напишу на досуге smile

Это сообщение отредактировал(а) Doc_d0s - 17.2.2005, 20:24
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
Sabulba
Дата 17.2.2005, 21:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вот примерно так должно быть smile
Если есть замечания, пишите!
программа дубовая, зато быстро smile

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define SIZE 256
void zero_array(char *tmpstr)
{
while(*tmpstr)
{

*tmpstr=0;
tmpstr++;
}
}
void main()
{

char string[SIZE]="The sum of 205.593 and -28.78 is 185.768 ";
char tmpstr[SIZE]="";
clrscr();
int flag=0;
float maxnumber=0,number=0;
char *p,*dest;
p=string;
dest=tmpstr;

while(*p)
{
if(isdigit(*p) || *p==' ' && isdigit(*(p+1)) || *(p+1)=='-' )
{
flag=1; //Starting of number sequence-lets copy it
}
while(flag && !(isdigit(*p)&&*(p+1)==' ') )
{
*dest=*p;
p++;
dest++;
}
if(flag)
{
number=atof(tmpstr);

if(number>maxnumber)
{
maxnumber=number;
}
}
dest=tmpstr;
zero_array(tmpstr); //clearing of tmpstr (string)
p++;
flag=0; //reinitializing of flag
}

puts(tmpstr);
printf("%.2f",maxnumber);
getch();

}

-----------------------------------------------------
какого дятла в C.S так много математики
Matrixon со мной согласится smile

  Вверх
Matrixon
  Дата 18.2.2005, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 17.2.2005

Репутация: нет
Всего: нет



Sabulba smile

молдчина ... даже все работает

smile
согласен

Это сообщение отредактировал(а) Matrixon - 18.2.2005, 01:04
PM MAIL   Вверх
Matrixon
Дата 18.2.2005, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 17.2.2005

Репутация: нет
Всего: нет



Doc_d0s

круто ....
сэнкс
PM MAIL   Вверх
IEZ
Дата 18.2.2005, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 10.2.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 3



Читай тему: перевод числа из long*(256-based) в char*
А лучше пользоваться поиском. smile


--------------------
"Нужно делать так, как нужно, а как не нужно, делать не нужно" (с) Винни-Пух.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0578 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.