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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2011, 12:59   #1
casusbeli
 
Регистрация: 21.12.2010
Сообщений: 4
По умолчанию Нужна оптимизация кода

Задача: В строке найти слова которые содержат цифры.
Код работает, все вроде нормально, мне только лично кажется, что вывод слов немного туповат..
Когда препод посмотрел на прогу начал обьяснять, что если прога находит цифру в слове, то она должна прекратить поиск в этом слове и начать со следующего, вот тока мне кажется у меня функция if() так и работает...
Кароче как можна оптимизировать эту прогу?
Код:
#include "stdafx.h"
#include "iostream"
using namespace std;
int main()
{
	char stroka[100]="Aslovo 7Bslovo Cslovo Dsl9ovo Eslovo 12345 Fslovo Gsl5ovo Hslovo Islovo Jslovo\0";
	cout<<stroka<<'\n';
	int i=0;
	while(stroka[i]!='\0')
	{
		if(stroka[i]>='0'&&stroka[i]<='9')
		{
			while(stroka[i-1]!=' '&&i!=0)
				--i;
			do 
			{
				cout<<stroka[i];
				++i;
			}
			while(stroka[i]!=' '&&stroka[i]!='\0');
			cout<<'\t';
		}
		++i;
	}
	cin.get();
	return 0;
}
casusbeli вне форума Ответить с цитированием
Старый 11.03.2011, 13:55   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Надо
Код:
#include <iostream>
А это
Код:
if(stroka[i]>='0'&&stroka[i]<='9')
лучше так:
Код:
if (isdigit(stroka[i]))
А вообще я бы сделал так (с помощью строковых потоков):
Код:
#include <iostream>

int main()
{
std::string text = "Aslovo 7Bslovo Cslovo Dsl9ovo Eslovo 12345 Fslovo Gsl5ovo Hslovo Islovo Jslovo";
std::string word;

istringstream str(text);
while (str >> word)
 {
 int len = word.length();
 bool digit = false;
 for (int i = 0; i < len; i++)
  if (isdigit(word[i]))
   {
   digit = true;
   break;
   }
 if (digit)
  std::cout << word << std::endl;
 }
std::cin.ignore();
std::cin.get();
}
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 11.03.2011, 17:43   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Код:
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <iterator>

using namespace std;

bool checkWord(const string &str)
{ return find_if(str.begin(), str.end(), ptr_fun(::isdigit)) == str.end(); }

int main()
{
	string str = "Aslovo 7Bslovo Cslovo Dsl9ovo Eslovo 12345 Fslovo Gsl5ovo Hslovo Islovo Jslovo";
	stringstream ss(str);
	remove_copy_if(istream_iterator<string>(ss), istream_iterator<string>(), ostream_iterator<string>(cout, "\n"), checkWord);
	return 0;
}
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 11.03.2011, 17:55   #4
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
Код:
...
	stringstream ss(str);
	remove_copy_if(istream_iterator<string>(ss), istream_iterator<string>(), ostream_iterator<string>(cout, "\n"), checkWord);
...
Отличное решение -)
Вот только поймет ли этот код преподаватель, давший это задание? -))

К тому же, насколько я понял, задание дано на закрепление какой-то определенной темы -- похоже, в данном случае, циклов...
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 11.03.2011, 18:24   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:
Вот только поймет ли этот код преподаватель, давший это задание? -))
если нет, что же это за преподаватель

Цитата:
К тому же, насколько я понял, задание дано на закрепление какой-то определенной темы -- похоже, в данном случае, циклов...
циклы/условия/функции и тп надо закреплять на сях, а не на плюсах. опять же, вопрос к компетентности преподавателя и учебного заведения.
задание поставлено. как студент его реализует - десятый вопрос.

меня всегда это в инсте бесило... когда говорят, КАК МНЕ нужно делать задание. да разберусь как нить
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 11.03.2011, 22:42   #6
casusbeli
 
Регистрация: 21.12.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Mandrivnyk Посмотреть сообщение
К тому же, насколько я понял, задание дано на закрепление какой-то определенной темы -- похоже, в данном случае, циклов...
Это не на повторение, а по предмету "теория алгоритмов", главная задача написать максимально оптимизированную прогу в плане скорости ее работы, тоесть нужно потом преподу доказать, что в даном случае алгоритм очень хороший и для больших текстов он будет наиболее оптимальный...

P.S. Нам даже разрешают использовать любой язык программирования, просто я этот лучше всего знаю..

Последний раз редактировалось casusbeli; 11.03.2011 в 22:45.
casusbeli вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация кода WoWan-SM Общие вопросы .NET 4 27.04.2010 11:33
Оптимизация кода viscas PHP 3 31.05.2009 16:04
Оптимизация кода Terran Общие вопросы Delphi 6 01.11.2008 16:57
Оптимизация кода. MAKTECYMA Общие вопросы C/C++ 2 05.06.2008 16:48
Нужна оптимизация дельфинского кода JTG Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 29.05.2008 14:53