Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2009, 21:18   #1
Kuh@r
Новичок
Джуниор
 
Регистрация: 29.03.2009
Сообщений: 1
Вопрос Выделение из строки записи вещественного числа.

Выделение из строки записи вещественного числа.
Вводится строка символов, состоящая из букв, цифр, запятых, знаков «+» и «-», а необходимо выделить подстроку, которая соответствует записи вещественного числа с фиксированной точкой. Ниже код выделяет только первую подстроку, а последующие не «добирает». Может кто другую идею подаст, заранее блогадарен.
Код:
#include <stdio.h>
#include <string.h>


int main()
{
	char StrSimv[100],*point,*Pdo,*Pposl,StrTmp[100],StrTmp1[100],*tmp,simv;
	int n,k,s=0,p=0,z=0,len;
	
	puts("Vvedite stroku razlichnih simvolo i znakov");
	gets(StrSimv);

		
	len=strlen(StrSimv);
	point=Pdo=Pposl=strstr(StrSimv,".");
	
	if (point==NULL) //Проверка есть ли в строке точка
	{
		puts("Net veschestvennogo chisla");
		return 0;
	}
	else
	{
		while (point!=NULL) 
		{
			// Определение и запись цифр до точки
			do  
			{			
				n=len-strlen(Pdo)-1;
				cout<<"n = "<<n<<endl;
				switch (StrSimv[n])
				{
				case '0': ;
				case '1': ;
				case '2': ;
				case '3': ;
				case '4': ;
				case '5': ;
				case '6': ;
				case '7': ;
				case '8': ;
				case '9': StrTmp1[s]=StrSimv[n];
				     	  s++;
					      StrTmp1[s]='\0';
						  Pdo-=1;
						  puts(Pdo);
						  break;
				default : z=1;s=0;break;
				}			
			}
			while (z!=1);
		
			z=0;
			tmp=strrev(StrTmp1);
			tmp=strcat(StrTmp1,".\0");
			simv=StrSimv[len]; //Без этого вся стока обрезается до точки
			
			do // Определение и запись цифр после точки
			{
				k=len-strlen(Pposl)+1;
				switch (StrSimv[k])
				{
				case '0': ;
				case '1': ;
				case '2': ;
				case '3': ;
				case '4': ;
				case '5': ;
				case '6': ;
				case '7': ;
				case '8': ;
				case '9': StrTmp[p]=StrSimv[k];					  
						  p++;
						  StrTmp[p]='\0';
						  Pposl+=1;					 
						  break;
				default : z=1;p=0;break;
				}			
			}
			while (z!=1);
			
			puts("   Vivod chisla");
			tmp=strcat(StrTmp1,StrTmp); 
			puts(StrTmp1); // Вывод числа
			tmp=strcpy(StrSimv,Pposl); // Обрезание начала строки
		
			StrTmp[0]='\0';
			StrTmp1[0]='\0';
			len=strlen(StrSimv);
			point=Pdo=Pposl=strstr(StrSimv,".");
		} 
	}

	puts("   The End.");
	return 0;
}
Kuh@r вне форума Ответить с цитированием
Старый 30.03.2009, 22:12   #2
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

Можно так находить вещественные числа в строке
Код:
string str(StrSimv);	
len=str.length();
int point = str.find(".");
	
if (point==-1) //Проверка есть ли в строке точка
{
    puts("Net veschestvennogo chisla");
    return 0;
}
while (point!=-1) 
{
   int p1 = str.rfind(" ", point); 
   if(p1==-1) p1=0;
   int p2 = str.find(" ", point);
   if(p2==-1) p2 = str.length()-1;

   string s = str.substr(p1, p2-p1+1);
   float ii = atof(s.c_str());//искомое вещественное число

   str = str.substr(p2+1);
   point = str.find(".");
}
У вас основная проблема в том, что каждый раз положение точки определяется в исходной, а не обрезанной строке:
Код:
tmp=strcpy(StrSimv,Pposl); // Обрезание начала строки

StrTmp[0]='\0';
StrTmp1[0]='\0';
len=strlen(StrSimv);
point=Pdo=Pposl=strstr(StrSimv,".");
Попробуйте работать в цикле только с одной строкой.
Svetlag вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выделение j-ой строки в RichTextBox TaTT DoGG Общие вопросы .NET 11 08.03.2009 15:56
Является ли заданная строка правильной записью вещественного числа с возможным знаком и десятичной точкой Banny Паскаль, Turbo Pascal, PascalABC.NET 7 18.12.2008 22:28
выделение чмсел из строки belikk Microsoft Office Excel 5 19.11.2008 17:15
Перевод вещественного числа в двоичный код shepelin Свободное общение 9 06.07.2008 10:00
Определить, является ли заданная строка правильной записью вещественного числа Sergik1977 Паскаль, Turbo Pascal, PascalABC.NET 2 18.10.2007 16:53