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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 145
23.03.2013, 16:34     Ввести строку текста (содержащую как слова так и числа), вывести все числа из данной строки #1
Ввести ленту произвольной длины, которую будем трактовать как текст, в котором слова отделены одним или несколькими пробелами (длина слов, в целом, произвольная). Учитывая, что в тексте встречаются слова, содержащие как буквы, так и цифры, а также просто числа, содержащие цифры, вывести на экран монитора все числа.
Каким образом это можно сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2013, 16:34     Ввести строку текста (содержащую как слова так и числа), вывести все числа из данной строки
Посмотрите здесь:

C++ Ввести строку и слово, удалить все вхождения слова и вывести строку
Ввести строку вывести каждое слово из этой строки с кол-ом повторений этого слова учитывая все знаки препинания... C++
C++ Ввести строку. Вывести строку так, чтобы за каждым словом следовало количество пробелов, равное длине слова.
Ввести с клавиатуры строку. Выдать на экран все слова из этой строки ... C++
Ввести строку. Выдать все слова, которые имеют длину больше, чем длина последнего слова строки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
23.03.2013, 16:44     Ввести строку текста (содержащую как слова так и числа), вывести все числа из данной строки #2
надо копать в сторону функции isdigit
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 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;
}
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 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;
}
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 145
23.03.2013, 17:50  [ТС]     Ввести строку текста (содержащую как слова так и числа), вывести все числа из данной строки #5
спасибо. только почему-то ни первая ни вторая програмки не хотят работать, куча каких-то ошибок.
и желательно чтоб программа была без использования vector/algorithm/iterator/boost и т.д., то есть с использование простых функций и циклов, т.к. мы такого как описано выше еще не учили..
может как-то попробовать через isdigit, как говорил Кудаив
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
23.03.2013, 18:04     Ввести строку текста (содержащую как слова так и числа), вывести все числа из данной строки #6
gorus95, http://liveworkspace.org/code/1LdAAT

Добавлено через 56 секунд
У вас должен быть установлен Boost
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 145
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");
}

но есть проблема..если вводить не английские символы а кириллицу вылетает ошибка, в чем проблема?
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 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]
за границу выходишь
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 145
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 Посмотреть сообщение
за границу выходишь
там все равно массив больше того объема текста который мы вводим, так что это не страшно, ведь массив символов дальше есть просто он пустой
programmer_11
94 / 69 / 5
Регистрация: 08.10.2011
Сообщений: 130
23.03.2013, 20:10     Ввести строку текста (содержащую как слова так и числа), вывести все числа из данной строки #10
Цитата Сообщение от gorus95 Посмотреть сообщение
сделал вот так, все работает на ура
Твоя программа работает неправильно. Если вводишь слова, в которых есть и буквы, и цифры, то программа выводит эти цифры.
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 145
23.03.2013, 21:20  [ТС]     Ввести строку текста (содержащую как слова так и числа), вывести все числа из данной строки #11
как тогда сделать чтоб она выводила только числа?
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2013, 00:39     Ввести строку текста (содержащую как слова так и числа), вывести все числа из данной строки
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 145
24.03.2013, 00:39  [ТС]     Ввести строку текста (содержащую как слова так и числа), вывести все числа из данной строки #13
Shef4u, читайте выше. я уже сделал программу которая выводит всю числовую информацию. но мне нужно чтоб программа выводила только числа.
например мы ввели
vjks kj343kljfkls 567lk 9043 kdjkssdsj
она должна вывести
только
9043
а не
343 567 9043

Добавлено через 2 часа 44 минуты
задача решена. спасибо всем за помощь.
Yandex
Объявления
24.03.2013, 00:39     Ввести строку текста (содержащую как слова так и числа), вывести все числа из данной строки
Ответ Создать тему
Опции темы

Текущее время: 12:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru