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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы
Старый 10.06.2013, 20:20   #1
mikeel
Пользователь
 
Регистрация: 18.03.2013
Сообщений: 10
По умолчанию Строки С++

Есть задание :
Из заданной последовательности слов удалить слова, содержащие числа.

и я написал данный код:
Код:
#include <iostream>
#include <list>
#include <string>
#include <sstream>
#include <iterator>
#include <algorithm>
using namespace std; 
typedef std::istream_iterator<std::string> ii;
 
int main()
{
    cout << "Put line: ";
    string line, new_line;
    getline(cin, line);
 
    stringstream str(line);
    list<string> w((ii(str)), ii());
 
    for (list<string>::iterator p = w.begin(); p != w.end(); )
    {
        if (isdigit((*p)[0]))
        {
            new_line += *p++;
            new_line.push_back(' ');
            continue;
        }
        unsigned i = 1;
        bool state = false;
        list<string>::iterator tmp = p++;
        for ( ; i < tmp->size(); ++i)
        {
            if (isdigit((*tmp)[i]))
            {
                w.erase(tmp);
                state = true;
                break;
            }
        }
        if (!state)
        {
            new_line += *tmp;
            new_line.push_back(' ');
        }
    }
 
    cout << new_line << endl;
	system("pause");
}
все работает. но:
во-первых, преподовательница сказала, что нельзя испольовать String, stringstream str(line)

вместо этого сказала про Char*

и во вторых, использовать фукнции

кто может помочь? времени в обрез ,а самому еще нужно несолько лаб доделать, исправте, пожалуйста

Последний раз редактировалось mikeel; 10.06.2013 в 20:26.
mikeel вне форума Ответить с цитированием
Старый 10.06.2013, 21:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
char *s="Строка раз д8а три ";
bool dig=false;
for(char* p=s, l=s;*p;p++){
 if(*p>='0' && *p<='9') dig=true;
 if(*p==' '){
   *p++=0;
   if(!dig) printf("%s ",l);
   dig=false;
   l=p; 
 }
}
Сразу предупреждаю - с потолка писал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.06.2013, 21:35   #3
mikeel
Пользователь
 
Регистрация: 18.03.2013
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
char *s="Строка раз д8а три ";
bool dig=false;
for(char* p=s, l=s;*p;p++){
 if(*p>='0' && *p<='9') dig=true;
 if(*p==' '){
   *p++=0;
   if(!dig) printf("%s ",l);
   dig=false;
   l=p; 
 }
}
Сразу предупреждаю - с потолка писал.
ничего себе, и куда мне это вставить? вместо чего?
mikeel вне форума Ответить с цитированием
Старый 10.06.2013, 22:28   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы вставил вместо всего.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.06.2013, 22:33   #5
mikeel
Пользователь
 
Регистрация: 18.03.2013
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я бы вставил вместо всего.
Можете объяснить то ,что Вы написали?
mikeel вне форума Ответить с цитированием
Старый 11.06.2013, 11:32   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пожалуйста:
Код:
// gg.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <malloc.h>

int _tmain(int argc, _TCHAR* argv[])
{
	//Описываем строку
char s[255]; //="Строка раз д8а три ";
// Вводим ее
gets(&s[0]);
// Флаг реагирующий на цифру в слове
bool dig=false;
// Проход по строке указателями
for(char *p=&s[0], *l=&s[0];*p;p++){
// Если цифра есть устанавливаем флаг
 if(*p>='0' && *p<='9') dig=true;
 // Если слово окончено
 if(*p==' '){
	 //Ограничиваем его для вывода
   *p++=0;
   // И если оно без цифры - выводим
   if(!dig) printf("%s ",l);
   //Сбрасываем флаг для следующего слова
   dig=false;
   // Перемещаем указатель на следующее слово
   l=p; 
 }
}
getchar();
return 0;
}
еще раз повторюсь - это идея, а не реальное решение.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на строки. Даны две строки. Определить можно ли из символов первой строки получить вторую строку.( написать подпрограммой и ANTON1994 Паскаль, Turbo Pascal, PascalABC.NET 5 09.02.2013 14:07
Программа на языке "Ассемблер" - ввод строки, анализ длины строки, добавление точки в конец строки Алексей_2012 Помощь студентам 1 05.04.2012 11:26
Сделать в гриде строки выше, чтобы не растягивать строки до бесконечности kris__tina БД в Delphi 1 09.06.2011 15:31
Создание пустой строки и копирование в неё содержимое предыдущей строки Gvaridos Microsoft Office Excel 2 29.10.2010 13:33
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10