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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2015, 19:50   #1
desets
 
Регистрация: 28.10.2015
Сообщений: 6
По умолчанию Задача по строкам

Доброго времени суток. Задачка по С++.

Задание: посчитать сумму всех чисел которые встречаются с СТРОКЕ СИМВОЛОВ. Числа могут быть как целыми так и не целыми, так же они могут быть и отрицательными. (Задание должно быть выполнено без использования классов)

Проблема в том, что я нахожу числа как символы, не как цифры, из-за чего не могу их сложить. Помогите пожалуйста! Как их сложить или как хотя бы как найти эти числа не как символы.

Вот что у меня есть на данный момент:

Код:
bool IsNumber(char ch)
{
	const char Numb[] = "0123456789";
	for (int nI = 0; Numb[nI]; nI++) if (Numb[nI] == ch) return true;
	return false;
}

void SearchNumb(char str[])
{
	int numb = 0;
	for (int nI = strlen(str) - 1; nI >= 0; nI--)
	{
		if (str[nI] == IsNumber(str[nI]))
		{
			int E=1;
			numb = numb * E + str[nI];
			E *= 10;
		}
		printf("%i\n", numb);
	}
}

int main()
{
	char Str[100];
	printf("Enter a string: "); gets_s(Str, _countof(Str));
	SearchNumb(Str);
	system("pause");
    return 0;
}
desets вне форума Ответить с цитированием
Старый 28.10.2015, 20:54   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

http://www.programmersforum.ru/showthread.php?t=284085
Годится идейка?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.10.2015, 21:23   #3
desets
 
Регистрация: 28.10.2015
Сообщений: 6
По умолчанию

Идейка годится. Но что означает запись


d=atof(&a[0]);

d - это число, которое программа выводит

а[0] - это символ с адресом 0 в строке?

atof - извините, я еще такую запись не встречал, не знаю что это.

Не могли бы парой слов объяснить всю эту строчку( d=atof(&a[0]))?
desets вне форума Ответить с цитированием
Старый 28.10.2015, 21:27   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Но что означает запись
atof() функция преобразования строки в вещественное число.
Цитата:
d - это число, которое программа выводит
В общем да.
Цитата:
а[0] - это символ с адресом 0 в строке?
Это начало строки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.10.2015, 21:40   #5
desets
 
Регистрация: 28.10.2015
Сообщений: 6
По умолчанию

Спасибо за объяснение. Но получается, что так я нахожу только положительные числа, а как найти и отрицательные числа?
desets вне форума Ответить с цитированием
Старый 28.10.2015, 21:50   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну добавь к условию знак -
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.10.2015, 22:04   #7
desets
 
Регистрация: 28.10.2015
Сообщений: 6
По умолчанию

Если вы имеете в виду, что условие должно быть таким
Код:
for(j=0;s[j+i] && s[i+j]>='0' && s[i+j]<='9' || s[i+j]=='.' || s[i+j]==',' // s[i + j] == '-'; j++)
то может и так, но минус перед числом я не нахожу, в отличии от числа.
К примеру ввожу строку: сумма-25равна, я нахожу 25, а не -25.
desets вне форума Ответить с цитированием
Старый 28.10.2015, 22:27   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
// s[i + j] == '-';
Что это? О_о
Ты в курсе основ Си, а конкретно операторы логических выражений?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.10.2015, 22:38   #9
desets
 
Регистрация: 28.10.2015
Сообщений: 6
По умолчанию

Ну как сказать? В школе Си не проходили, а в университете только второй месяц как учим С++ и то по 1 лекции и 1 практики в 2 недели, а Си отдельно не учили и как я понимаю не будем учить.

А если ты про две косые(//), то это опечатка, сам только заметил.
А так в принципе:
&& - оператор и(and)
|| -оператор или (or)
desets вне форума Ответить с цитированием
Старый 28.10.2015, 23:01   #10
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Код:
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
 
 
 
double get_sum ( const std::string & str )
{
    std::stringstream ss ( str ) ;
    double sum = 0.0 ;
    for (;;){
        double number = 0.0 ;
        if ( ss >> number ){
            sum += number ;
        } else {
            if ( ss.eof() )
                break ;
            ss.clear() ;
            ss.get() ;
        }
    }
    return sum ;
}
 
 
 
 
int main()
{
    std::string str = "1sdjk-53kl.4.,d23,dfg;2 dfgm 11 sdf e 1 df-2.53df " ;
    std::cout << get_sum(str) << std::endl ;
}
http://rextester.com/TCA89840
Croessmah вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача по строкам с++ corner Помощь студентам 0 19.05.2012 23:44
задача по строкам hunter08923 Общие вопросы C/C++ 6 31.03.2011 22:29
задача по строкам hunter08923 Общие вопросы C/C++ 1 30.03.2011 08:31
Задача по строкам 2. seeton Помощь студентам 2 07.12.2009 19:29
Задача на С++ по строкам EwwwA Помощь студентам 2 20.12.2008 15:22