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

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

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

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

Купить рекламу на форуме - 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