Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
5 / 2 / 0
Регистрация: 14.05.2013
Сообщений: 104
1

Найти все слова, являющиеся числами

14.05.2013, 13:52. Показов 1434. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Прошу помочь кому не трудно с задачкой

Поиск чисел
Ввод из: Стандартный ввод
Вывод в: Стандартный вывод


Учитель информатики С.Д. Дисководов записал некоторое предложение из нескольких слов. Словом он называет любую последовательность латинских букв и цифр. Слова в предложении разделены пробелами и переводами строк. Теперь он хочет, чтобы ученики нашли все слова, являющиеся числами.

Входные данные: Предложение из нескольких слов. Каждое слово длиной не более 8 символов. Ввод всегда заканчивается словом 'end'.

Выходные данные: Вывести все слова, являющиеся числами, по одному в каждой строке. Выводить в порядке их появления в исходном предложении. Если в предложении нет ни одного числа, вывести 'nothing'.

Пример входных данных
I have a 3 sons
and 1 son and 25dogs
end

Пример выходных данных
3
1
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2013, 13:52
Ответы с готовыми решениями:

Найти все элементы матрицы являющиеся простыми числами и обнулить их
Случайным образом задается двумерный массив замера N*M. Нацти все элементы, являющиеся простыми...

Найти и вывести на экран все слова, являющиеся палиндромами
В произвольном тексте (взятом из файла), содержащем не более 10 строк, в каждой строке не более 80...

Вывести все элементы массива, являющиеся простыми числами
Добрый вечер,форумчане. Не могу разобраться с учебной задачей. Задача: Дан одномерный массив....

Получить в файле g все компоненты файла f, являющиеся четными числами
Всем привет! Помогите, пожалуйста, написать код программы к задаче: Дан файл, компоненты которого...

16
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
14.05.2013, 14:17 2
От мое красивое элегантное решение:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
#include <cstring>
using std::strtok;
#include <cctype>
using std::isdigit;
#include <vector>
using std::vector;
 
int main()
{
    char str[]="I have a 3 sons and 1 son and 25dogs end 3434 dsfasdf 34 ";
    char* leksema=strtok(str," ");
    vector<string> vec;
 
 
    while(leksema!=NULL)
    {
        //cout <<leksema<<endl;
 
        if(isdigit(leksema[0]))
        {
            int i=1;
            for(;i<strlen(leksema);i++)
            {
                if(!isdigit(leksema[i]))
                    break;
            }
            
            if(i==strlen(leksema))
            {
                vec.push_back(leksema);
            }
        }
 
        leksema=strtok(NULL, " ");
    }
 
    //vuvod rezyl6tatov
    for(int i=0;i<vec.size();i++)
        cout <<vec[i]<<endl;
 
    return 0;
}
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
14.05.2013, 14:30 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
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
 
bool isNumber( const std::string& s )
{
    for( auto c : s )
    {
        if( !std::isdigit(c) ) return false;
    }
    return true;
}
 
int main() {
 
    std::istream_iterator<std::string> iit(std::cin);
    std::vector<std::string> v;
    std::copy_if( iit, std::istream_iterator<std::string>(), back_inserter(v), isNumber );
    std::ostream_iterator<std::string> oit( std::cout, "\n");
    std::copy( v.begin(), v.end(), oit );
    
    return 0;
}
https://ideone.com/s0Xerp
0
5 / 2 / 0
Регистрация: 14.05.2013
Сообщений: 104
14.05.2013, 15:52  [ТС] 4
Спасибо! Еще два момента. Ninja2 нужно чтоб вводилось самому с клавиатуры. Tulosba скажи пожалуйста в чем компилировать, пробовал в visial studio 2010, выдает ошибки:
Миниатюры
Найти все слова, являющиеся числами  
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
14.05.2013, 16:09 5
ArtLext, это С++11 стандарт. Для того, чтобы VS2010 скушала надо как-то так переписать:
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
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <cctype>
#include <string>
 
bool isNumber( const std::string& s )
{
    for( std::string::const_iterator it=s.begin(); it!=s.end(); ++it )
    {
        if( !std::isdigit(*it) ) return false;
    } 
    return true;
}
 
int main() {
 
    std::istream_iterator<std::string> iit(std::cin);
    std::vector<std::string> v;
    std::copy_if( iit, std::istream_iterator<std::string>(), back_inserter(v), isNumber );
    std::ostream_iterator<std::string> oit( std::cout, "\n");
    std::copy( v.begin(), v.end(), oit );
    
    return 0;
}
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
14.05.2013, 16:17 6
Цитата Сообщение от ArtLext Посмотреть сообщение
Спасибо! Еще два момента. Ninja2 нужно чтоб вводилось самому с клавиатуры. Tulosba скажи пожалуйста в чем компилировать, пробовал в visial studio 2010, выдает ошибки
От добавил:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
#include <string>
using std::string;
#include <cstring>
using std::strtok;
#include <cctype>
using std::isdigit;
#include <vector>
using std::vector;
 
int main()
{
    char str[500]="I have a 3 sons and 1 son and 25dogs end 3434 dsfasdf 34 ";
    cin.getline(str,500,'\n');
    char* leksema=strtok(str," ");
    vector<string> vec;
 
 
    while(leksema!=NULL)
    {
        //cout <<leksema<<endl;
 
        if(isdigit(leksema[0]))
        {
            int i=1;
            for(;i<strlen(leksema);i++)
            {
                if(!isdigit(leksema[i]))
                    break;
            }
            
            if(i==strlen(leksema))
            {
                vec.push_back(leksema);
            }
        }
 
        leksema=strtok(NULL, " ");
    }
 
    //vuvod rezyl6tatov
    for(int i=0;i<vec.size();i++)
        cout <<vec[i]<<endl;
 
    return 0;
}
Добавлено через 1 минуту
У меня как раз visual studio 2010 мой код норм компилится.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
14.05.2013, 16:43 7
Tulosba, Ну а зачем цикл, когда есть all_of в С++11-то?

C++
1
2
3
4
bool isNumber( const std::string& s )
{
    return std::all_of(std::begin(s), std::end(s), std::isdigit);
}
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
14.05.2013, 16:58 8
Цитата Сообщение от ForEveR Посмотреть сообщение
Ну а зачем цикл, когда есть all_of в С++11-то?
Я вот писал цикл и думал: "Что-то не то. Должно быть что-то стандартное"
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
14.05.2013, 19:52 9
Да и вектор-то вроде ни к чему...
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
14.05.2013, 22:14 10
Цитата Сообщение от Somebody Посмотреть сообщение
Да и вектор-то вроде ни к чему...
Угу. Можно сразу на вывод:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <iterator>
#include <algorithm>
 
bool isNumber( const std::string& s )
{
    return std::all_of( s.begin(), s.end(), static_cast<int(*)(int)>(std::isdigit));
} 
 
int main() {
    std::istream_iterator<std::string> iit(std::cin);
    std::ostream_iterator<std::string> oit( std::cout, "\n");
    std::copy_if( iit, std::istream_iterator<std::string>(), oit, isNumber );
    
    return 0;
}
https://ideone.com/ym5D0T
0
5 / 2 / 0
Регистрация: 14.05.2013
Сообщений: 104
15.05.2013, 17:00  [ТС] 11
Подходящего решения так и не дождался, сел делать сам, получилось но с одним косякам если в строке две цифры выводит только последнюю, в коде разбираться не прошу и даже не советую, у меня очень запутанная логика
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//VS2010 c++ 
#include <iostream>
#include <string>
using namespace std; 
 
 
string str;
string str2;
int snch=0;
int ss=0; 
int v,k1,k2,ds;
int mas[100];
int y=0;
int x=5;
 
 
int main()
{setlocale(LC_ALL, "rus");
 
while (str!="end"){
    getline(cin, str);
    if (str!="end"){
 
ds = str.length();
str="*" + str +"*";
ss=ss+1; //колво строк
/*обработка строки*/
 
mas[ss]=-1;
    for(int i=1; i!=ds+2;i++)
    {//*ищем цыфру*//
    if(str[i]=='0'||str[i]=='1'||str[i]=='2'||str[i]=='3'||str[i]=='4'||str[i]=='5'||str[i]=='6'||str[i]=='7'||str[i]=='8'||str[i]=='9')
        {///*что делаем когда нашил цыфру*///
        k1=i;k2=i;//запоминаем первую координату
                ////*проверяем число ли это v=1? *////
                if(str[i-1]==' '||str[i-1]=='*'){v=1;while(str[i]!=' '&&str[i]!='*'){if(str[i]!='0'&&str[i]!='1'&&str[i]!='2'&&str[i]!='3'&&str[i]!='4'&&str[i]!='5'&&str[i]!='6'&&str[i]!='7'&&str[i]!='8'&&str[i]!='9'){v=0;}i++;k2=k2+1;}}else v=0;
                ////*проверяем число ли это v=1? *////   
 
                if(v==1){
                    //cout<<"кардины числа: "<<k1<<"-"<<k2-1;
                str2="";
                for(int j=k1; j<=k2; j++){str2=str2 + str[j];}
                mas[ss]=atoi(str2.c_str());    ///записываеться только посл число в строке
                                                    }
                //операция над каждым числом в строке
}///*что делаем когда нашил цыфру*///
 
}//*ищем цыфру*//
    
if(mas[ss]==-1){y=y+1;}
        
/*обработка строки*/
    }
    }
 
 
if(y==ss){cout<<"nothing";} else {
 
for(int j=1; j<=ss; j++){if(mas[j]>=0){cout<<mas[j]<<endl;}}
    
}
 
system ("pause");
return 0;
}
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.05.2013, 18:18 12
Цитата Сообщение от ArtLext Посмотреть сообщение
Подходящего решения так и не дождался
Что для Вас является подходящим решением?
0
5 / 2 / 0
Регистрация: 14.05.2013
Сообщений: 104
15.05.2013, 19:44  [ТС] 13
Tulosba, код программы удовлетворяющий все условия задачи)
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.05.2013, 21:39 14
ArtLext, фразу "nothing" не добавить?
0
5 / 2 / 0
Регистрация: 14.05.2013
Сообщений: 104
15.05.2013, 23:28  [ТС] 15
Tulosba, если брать ваш вариант задачи, который кстати заработал в vs 2010, то для начала хотяб "реакуцию" на слово "end". PS Да и не силен в программировании вот только начинаю..
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
16.05.2013, 11:04 16
Цитата Сообщение от ArtLext Посмотреть сообщение
то для начала хотяб "реакуцию" на слово "end"
Какой привередливый заказчик попался
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
33
34
35
#include <iostream>
#include <iterator>
#include <algorithm>
 
bool isNumber( const std::string& s )
{
    for( std::string::const_iterator it=s.begin(); it!=s.end(); ++it )
    {
        if( !std::isdigit(*it) ) return false;
    } 
    return true;
}
 
bool printNumbersOnly( std::istream_iterator<std::string>& it )
{
    bool nothing = true;
    std::istream_iterator<std::string> eos;
    while( it != eos )
    {
        if( *it == "end" ) break;
        if( isNumber(*it) )
        {
            nothing = false;
            std::cout << *it << std::endl;
        }
        ++it;
    }
    return !nothing;
}
 
int main() {
    std::istream_iterator<std::string> iit(std::cin);
    if( !printNumbersOnly( iit ) ) std::cout << "nothing\n";
    return 0;
}
https://ideone.com/7TnX7m
1
5 / 2 / 0
Регистрация: 14.05.2013
Сообщений: 104
02.06.2013, 21:48  [ТС] 17
Tulosba, спасибо большое это на 100% то что нужно!
0
02.06.2013, 21:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2013, 21:48
Помогаю со студенческими работами здесь

Получить в файле g все компоненты файла f, являющиеся четными числами
Помогите написать программу. Дан файл f, компоненты которого являются целыми числами. Получить в...

Удалить из массива целых чисел все элементы, являющиеся совершенными числами.
Удалить из массива целых чисел все элементы, являющиеся совершенными числа ми. #include...

Удалить из массива целых чисел все элементы, являющиеся простыми числами
Люди, для кого не составит большого труда, напишите пожалуйста программу по поставленной задаче : ...

Удалить из массива целых чисел все элементы, являющиеся простыми числами
Помогите пожалуйста написать программу по условию : Удалить из массива целых чисел все элементы,...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru