Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 151
Завершенные тесты: 1
#1

Ввести строку текста (содержащую как слова так и числа), вывести все числа из данной строки - C++

23.03.2013, 16:34. Просмотров 2718. Ответов 12
Метки нет (Все метки)

Ввести ленту произвольной длины, которую будем трактовать как текст, в котором слова отделены одним или несколькими пробелами (длина слов, в целом, произвольная). Учитывая, что в тексте встречаются слова, содержащие как буквы, так и цифры, а также просто числа, содержащие цифры, вывести на экран монитора все числа.
Каким образом это можно сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2013, 16:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ввести строку текста (содержащую как слова так и числа), вывести все числа из данной строки (C++):

Вывести на экран все числа-палиндромы (числа, которые одинаково читаются как слева так и справа) - C++
Вывести на экран все числа палиндромы (т.е числа которые читаются одинаково как слева, так и справа) из заданного интервала натурального...

Ввести строку вывести каждое слово из этой строки с кол-ом повторений этого слова учитывая все знаки препинания... - C++
Составить прогу: Ввести строку вывести каждое слово из этой строки с кол-ом повторений этого слова учитывая все знаки препинания... ...

Ввести строку. Вывести строку так, чтобы за каждым словом следовало количество пробелов, равное длине слова. - C++
Ввести строку. Вывести строку так, чтобы за каждым словом следовало количество пробелов, равное длине слова.

Ввести числа, пока не введен 0 и вывести все введеные числа - C++
Здравствуйте! Скажите пожалуйста, мне нужно реализовать ввод чисел, пока не будет введен 0. После того как был введен ноль, мне нужно...

Вывести строку, содержащую слова исходной строки, но в обратном порядке - C++
Помогите доработать задачу, пожалуйста. #include <iostream> #include <string> using namespace std; int main() { string...

Как в данной программе сделать так чтобы все генерируемые числа стояли по возрастанию или по убыванию - C++
как в данной программе сделать ток что бы все генерируемые числа стояли по возрастанию или по убыванию нужен свежий взгляд ...

12
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
23.03.2013, 16:44 #2
надо копать в сторону функции isdigit
0
Ev[G]eN
iOS/Android Developer
Эксперт С++
5097 / 1535 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
23.03.2013, 17:33 #3
на скорую руку
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <algorithm>
#include <iterator>
#include <iostream>
#include <iomanip>
#include <cstring>
 
int main ()
{
    std::string string;
    std::cout << "Input the string: " << std::endl;
    std::getline(std::cin, string);
    string.insert(string.end(), ' ');
 
    std::string currWord;
    std::cout << "All numbers in the string: " << std::endl;
    for (auto currChar: string) {
        if (currChar != ' ') {
            currWord.push_back(currChar);
        } else {
            std::cout << std::setw(5);
            std::copy_if(currWord.begin(), currWord.end(), std::ostream_iterator <char> (std::cout), [] (char i) -> bool {
                return isdigit(i);
            });
            currWord.clear();
        }
    }
 
    return 0;
}
0
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
23.03.2013, 17:41 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <vector>
#include <string>
#include <boost/algorithm/string.hpp>
 
int main() 
{
    using namespace boost::algorithm;
 
    std::cout<<"Enter string: ";
    std::string line;
    std::getline(std::cin, line, '\n');
    std::vector<std::string> numbers;
    boost::split(numbers, line, is_alpha() || is_space(), boost::token_compress_on);
    for (auto& x : numbers) std::cout<<x<<"\n";
    
    return 0;
}
0
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 151
Завершенные тесты: 1
23.03.2013, 17:50  [ТС] #5
спасибо. только почему-то ни первая ни вторая програмки не хотят работать, куча каких-то ошибок.
и желательно чтоб программа была без использования vector/algorithm/iterator/boost и т.д., то есть с использование простых функций и циклов, т.к. мы такого как описано выше еще не учили..
может как-то попробовать через isdigit, как говорил Кудаив
0
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
23.03.2013, 18:04 #6
gorus95, http://liveworkspace.org/code/1LdAAT

Добавлено через 56 секунд
У вас должен быть установлен Boost
0
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 151
Завершенные тесты: 1
23.03.2013, 19:36  [ТС] #7
понятно. а можно написать как-то так чтоб поверили что это делал студент-первокурсник?
просто мы такого еще не учили, и вряд ли даже если оно работает я смогу им воспользоваться...
как можно сделать через стандартные простые функции и циклы?
например проверять в цикле если символ - цифра то выводим его, если пробел, кома, точка или \t ставим пробел и дальше ищем цифры... логично вроде, только не могу на практике оформить

Добавлено через 30 минут
сделал вот такую сырую простенькую программу, вроде работает
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <cstring>
using namespace std;
int main(void)
{
    setlocale (LC_ALL, "");
    char text[300];
    gets_s(text);
    for (unsigned int i = 0; i < (unsigned int)strlen(text); i++)
    {
        if (isdigit(text[i]))
        {
            cout << text[i];
 
            if (!isdigit(text[i+1]))
            {
            cout << " ";
            }
        }
        
    }
    cout << endl;
    system("pause");
}

но есть проблема..если вводить не английские символы а кириллицу вылетает ошибка, в чем проблема?
0
Ev[G]eN
iOS/Android Developer
Эксперт С++
5097 / 1535 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
23.03.2013, 20:01 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <iomanip>
#include <cstring>
 
int main ()
{
    char string[256];
    gets(string);
 
    char *currWord = strtok(string, " ");
    while (currWord) {
        std::cout << std::setw(5);
        for (unsigned i = 0; i < strlen(currWord); i++)
            if (isdigit(currWord[i]))
                std::cout << currWord[i];
        currWord = strtok(nullptr, " ");
    }
 
    return 0;
}
Добавлено через 33 секунды
Цитата Сообщение от gorus95 Посмотреть сообщение
i < (unsigned int)strlen(text)
Цитата Сообщение от gorus95 Посмотреть сообщение
text[i+1]
за границу выходишь
0
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 151
Завершенные тесты: 1
23.03.2013, 20:07  [ТС] #9
сделал вот так, все работает на ура
как раз надо было чем попроще
только еще один вопрос, можно ли еще сделать так чтоб эти числа не просто выводились как последовательность цифр, а чтоб можно было эти числа например записать в переменные? т.е. числа которые получились в выходном потоке записать именно как числа а не набор цифр
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
using namespace std;
bool digit (char text)
{
     if (text >= '0' && text <= '9')
     {
     return true;
     } else 
     return false;
}
int main(void)
{
    setlocale (LC_ALL, "");
    int i = 0;
    char text[1000];
    gets(text);
    do
    {
        if (digit(text[i]))
        {
            cout << text[i];
 
            if (!digit(text[i+1]))
            {
            cout << " ";
            }
        }
        i++;
    } while (text[i]); 
    cout << endl;
    system("pause");
}


Добавлено через 2 минуты
Цитата Сообщение от Ev[G]eN Посмотреть сообщение
за границу выходишь
там все равно массив больше того объема текста который мы вводим, так что это не страшно, ведь массив символов дальше есть просто он пустой
0
programmer_11
94 / 69 / 5
Регистрация: 08.10.2011
Сообщений: 130
23.03.2013, 20:10 #10
Цитата Сообщение от gorus95 Посмотреть сообщение
сделал вот так, все работает на ура
Твоя программа работает неправильно. Если вводишь слова, в которых есть и буквы, и цифры, то программа выводит эти цифры.
0
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 151
Завершенные тесты: 1
23.03.2013, 21:20  [ТС] #11
как тогда сделать чтоб она выводила только числа?
0
Shef4u
15 / 15 / 0
Регистрация: 31.10.2011
Сообщений: 116
23.03.2013, 21:39 #12
как-то так, и ничего сложного
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#pragma hdrstop
#include<iostream.h>
#include<windows.h>
#include<string.h>
#pragma argsused
int main(int argc, char* argv[])
{
  string s;
  cout<<"Vvedite stroku: "<<endl;
  getline(cin,s);
  for(int i=0; i<s.length();i++)
  {
    if(s[i]>='0' && s[i]<='9')
    {
    cout<<s[i];
    }
  }
  cout<<endl;
  system("pause");
        return 0;
}
0
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 151
Завершенные тесты: 1
24.03.2013, 00:39  [ТС] #13
Shef4u, читайте выше. я уже сделал программу которая выводит всю числовую информацию. но мне нужно чтоб программа выводила только числа.
например мы ввели
vjks kj343kljfkls 567lk 9043 kdjkssdsj
она должна вывести
только
9043
а не
343 567 9043

Добавлено через 2 часа 44 минуты
задача решена. спасибо всем за помощь.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2013, 00:39
Привет! Вот еще темы с ответами:

Ввести строку и слово, удалить все вхождения слова и вывести строку - C++
помогите с лабой! Добавлено через 22 секунды через &lt;stdio.h&gt;

Ввести строку. Выдать все слова, которые имеют длину больше, чем длина последнего слова строки - C++
ввести строку. на печать, выдать все слова, которые имеют длину больше, чем длина последнего слова строки.

Ввести в программу строку (числа, латиница), считать только числа, записать числа в массив - C++
Нужна помощь! Срочно! Нужно ввести в программу строку (числа, латиница), считать только числа, записать числа в массив. Помогите,...

Ввести с клавиатуры строку. Выдать на экран все слова из этой строки ... - C++
Помогите сделать 2 задачи на С 1 Ввести с клавиатуры строку. Выдать на экран все слова из этой строки, длина которых отличается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Yandex
Объявления
24.03.2013, 00:39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru