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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2008, 20:12   #1
Nattka
 
Регистрация: 01.12.2008
Сообщений: 9
По умолчанию Использование строк (С++)

помогите решить задачку.

Дана строка символов, состоящих из цифр, разделенных пробелами. Вывести четные числа этой строки.
Nattka вне форума Ответить с цитированием
Старый 01.12.2008, 20:56   #2
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

Код:
#include <iostream>

int main()
{
	int count = 0;
	int val;
	char *buff;
	char *pStr = "1235 534 456 234 865 23 12";
	
	while(true)
	{
		if ( (*pStr == ' ') || (*pStr == 0) )
		{
			buff = new char[count + 1];
			for (int i = 0; i < count; i++)
				buff[i] = *(pStr - count + i);

			buff[count] = 0;
			val = atoi(buff);

			if (val % 2 == 0) 
				printf("%s\n", buff);
			
			delete [] buff;

			if (*pStr == 0)
				break;

			count = 0;
			pStr++;
		}
		else
		{
			count++;
			pStr++;
		}
	}

	return 0;
}
как то так
vvviperrr вне форума Ответить с цитированием
Старый 02.12.2008, 12:32   #3
StarWorm
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 233
По умолчанию

Я бы использовал функцию strtok() для выделения лексем из строки...
StarWorm вне форума Ответить с цитированием
Старый 02.12.2008, 17:46   #4
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

2StarWorm да, пожалуй так будет проще) просто хотелось немного с указателями поработать)
vvviperrr вне форума Ответить с цитированием
Старый 02.12.2008, 22:35   #5
Nattka
 
Регистрация: 01.12.2008
Сообщений: 9
По умолчанию

спасибо, буду разбираться, хотя для меня это темный лес. 5 лаб сама сделала, а 3 никак осилить не могу

Последний раз редактировалось Nattka; 02.12.2008 в 22:39.
Nattka вне форума Ответить с цитированием
Старый 03.12.2008, 00:37   #6
StarWorm
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 233
По умолчанию

5 лаб сама сделала - это УЖЕ РЕЗУЛЬТАТ!!!
В программировании главное понимание и логический склад ума... Ну и терпение, конечно же!

Если тот код кажется сложным, то вот мой вариант... Попробуй разобраться, вроде проще для понимания:
Код:
#include <iostream>
#include <stdio.h>
#include <conio.h>

using std::cout;
using std::cin;

int main()
{
	char* str=new char[255];
	char* token;
	const char* seps=" ";
	strcpy(str,"12 16   19  30  31   87   68 124 125");
	token=strtok(str,seps);
	int i=1;
	while(token != NULL)
	{
		if(atoi(token)%2==0)
		{
			cout<<i++<<") "<<token<<"\n";
		}
		token = strtok( NULL, seps );
	}

	delete [] str;
	getch();
}

Последний раз редактировалось StarWorm; 03.12.2008 в 00:49.
StarWorm вне форума Ответить с цитированием
Старый 03.12.2008, 00:44   #7
Nattka
 
Регистрация: 01.12.2008
Сообщений: 9
По умолчанию

Цитата:
Сообщение от StarWorm Посмотреть сообщение
5 лаб сама сделала - это УЖЕ РЕЗУЛЬТАТ!!!
В программировании главное понимание и логический склад ума... Ну и терпение, конечно же!
Спасибо за комплимент. Стараюсь вникнуть, но ... учась заочно, тяжко
Nattka вне форума Ответить с цитированием
Старый 03.12.2008, 03:40   #8
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
По умолчанию

Учитесь использовать стандартные библиотеки C++. Например, вот так:
Код:
#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main()
{
    char const * str = "1235 534 456 234 865 23 12";
    istringstream in(str);

    int num;
    while (in >> num)
    {
        if ((num & 1) == 0)
        {
            cout << num << endl;
        }
    }
}
Элементарно, правда? Никаких тебе strtok, указателей и остальной ерунды.

Последний раз редактировалось como; 03.12.2008 в 05:12.
como вне форума Ответить с цитированием
Старый 03.12.2008, 22:34   #9
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от como Посмотреть сообщение
Учитесь использовать стандартные библиотеки C++. Например, вот так:
Код:
#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main()
{
    char const * str = "1235 534 456 234 865 23 12";
    istringstream in(str);

    int num;
    while (in >> num)
    {
        if ((num & 1) == 0)
        {
            cout << num << endl;
        }
    }
}
Элементарно, правда? Никаких тебе strtok, указателей и остальной ерунды.
И никаких знаний после этого
Нам, например, в универе, для элементарных задач запрещали пользоваться стандартными функциями (ну кроме ввода/вывода)
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 03.12.2008, 23:18   #10
Nattka
 
Регистрация: 01.12.2008
Сообщений: 9
По умолчанию

Цитата:
Сообщение от como Посмотреть сообщение
Учитесь использовать стандартные библиотеки C++. Например, вот так:
[code]
#include <iostream>

Элементарно, правда? Никаких тебе strtok, указателей и остальной ерунды.
Спасибо за помощь, но что-то прога у меня не пошла и препод не любит оператор while (извиняюсь, что не сообщила заранее об этом).


Сообщение от StarWorm

спасибо,поняла, только переделала под for.

Последний раз редактировалось Nattka; 03.12.2008 в 23:24.
Nattka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование *.swf Романнн Мультимедиа в Delphi 14 02.04.2010 09:27
Использование 2х форм Zeraim Общие вопросы Delphi 4 27.05.2008 17:14
Использование потоков Repz Общие вопросы Delphi 6 25.01.2008 14:20
Excel max 256 строк VS user надо 300 строк Exo Microsoft Office Excel 3 10.01.2008 17:14
Использование TChart Tvv7-7-7 Помощь студентам 7 24.06.2007 21:08