Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
ruskub
0 / 0 / 1
Регистрация: 20.03.2016
Сообщений: 63
1

В файле найти слова состоящие только из цифр

28.05.2016, 11:58. Просмотров 654. Ответов 10
Метки нет (Все метки)

Дан текстовый файл. Написать функцию, которая проверяет, есть ли в нем слова, состоящие только из цифр, если есть – удалить их.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2016, 11:58
Ответы с готовыми решениями:

Напечатать все слова, состоящие только из цифр
напечатать все слова , состоящие только из цифр

Пользователь вводит строку: удалить все слова, состоящие только из цифр
Пользователь вводит строку с клавиатуры, слова отделяются пробелами . Нужно...

Найти слова, состоящие из цифр, и сумму чисел, которые образуют эти слова через string
Дан текст. Найти слова, состоящие из цифр, и сумму чисел, которые образуют эти...

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

Нужно перекинуть из файла F1 в F2 строки, состоящие только из одного слова, и найти в F2 самое длинное слово
#include <iostream> #include <fstream> #include <cstring> #include <cstdlib>...

10
Геомеханик
792 / 597 / 939
Регистрация: 26.06.2015
Сообщений: 1,409
28.05.2016, 16:47 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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <fstream>
#include <cctype>
#define is_delim(c) (isspace((c)) || ispunct((c)))
 
//удаление числовых слов
bool remove_wdec(const char* filename){
    std::ifstream fin(filename, std::ifstream::binary);
    if(! fin.is_open())
        return false;
 
    fin.seekg(0, fin.end);
    int n = (int)fin.tellg();
    if(n <= 0)
        return false;
 
    char* s = new (std::nothrow) char[n + 1];
    if(s == NULL)
        return false;
 
    fin.seekg(0, fin.beg);
    fin.read(s, n);
    if(fin.gcount() != n){
        delete[] s;
        return false;
    }
    fin.close();
 
    //удаление числовых слов
    s[n]    = '\0';
    char* a = s;
    while(*a && !isdigit(*a))
        ++a;
 
    char* p;
    bool  ok = false;
    for(char* b = a; *a; *a = *b){
        if((b == s) || is_delim(*(b - 1))){
            p = b;
            while(*p && isdigit(*p))
                ++p;
 
            if(((p - b) > 0) && (!*p || is_delim(*p))){
                b  = p;
                ok = true;
                continue;
            }
        }
        ++a;
        ++b;
    }
 
    if(ok){//сохранение файла
        std::ofstream fout(filename, std::ofstream::binary);
        if(fout.is_open()){
            fout.write(s, (int)(a - s));
            ok = !fout.fail();
            fout.flush();
            fout.close();
        } else
            ok = false;
    }
    delete[] s;
    return ok;
}
 
int main(void){
    if(remove_wdec("file.txt"))
        std::cout << "file modify." << std::endl;
    return 0;
}
1
Kitas
0 / 0 / 0
Регистрация: 17.05.2017
Сообщений: 48
15.02.2018, 19:36 3
А если сделать все тоже самое, только не в файле, а в введённой пользователем строке?
0
igorrr37
1899 / 1506 / 763
Регистрация: 21.12.2010
Сообщений: 2,542
Записей в блоге: 10
16.02.2018, 12:46 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <cctype>
 
int main()
{
    std::string str("12,1d23:23 cv 34");
    std::string dig("0123456789");
    std::string::size_type ib(0), ie(0);
    while ((ib = str.find_first_of(dig, ie)) != std::string::npos)
    {
        ie = str.find_first_not_of(dig, ib);
        if ((0 == ib || !isalnum(str.at(ib - 1))) && (std::string::npos == ie || !isalnum(str.at(ie))))
        {
            std::cout << str.substr(ib, ie - ib) << std::endl;
            str.erase(ib, ie - ib);
            ie = ib;
        }
    }
    std::cout << str << std::endl;
}
1
Kitas
0 / 0 / 0
Регистрация: 17.05.2017
Сообщений: 48
16.02.2018, 18:07 5
Добавлено через 10 минут
igorrr37, Немного не понятно, что происходит в 13 строке?
0
igorrr37
1899 / 1506 / 763
Регистрация: 21.12.2010
Сообщений: 2,542
Записей в блоге: 10
16.02.2018, 19:37 6
в 13 строке проверяется что найденная последовательность цифр является словом (а не частью другого слова), то есть окружена пробелами, пунктуацией, началом и концом строки
1
Kitas
0 / 0 / 0
Регистрация: 17.05.2017
Сообщений: 48
16.02.2018, 22:32 7
igorrr37, Спасибо большое тебе!)
0
outoftime
║XLR8║
764 / 663 / 212
Регистрация: 25.07.2009
Сообщений: 3,320
Записей в блоге: 5
17.02.2018, 12:45 8
ruskub, Kitas, почему не boost::regex?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include <chrono>
#include <boost/regex.hpp>
 
bool match(const std::string &value)
{
    static const boost::regex expression("^(\\d+)$");
    return boost::regex_match(value.c_str(), what, expression);
}
 
int main()
{
    std::string t = "148219417991827491273876",
        f = "213987NO89127398";
    
    std::cout << std::boolalpha << match(t) << " ";
    std::cout << std::boolalpha << match(f) << " ";
    std::cout << std::endl;
}
Компиляция прмерно так

Код
$ clang++ -std=c++11 -lboost_regex -o run run.cpp
1
Kitas
0 / 0 / 0
Регистрация: 17.05.2017
Сообщений: 48
17.02.2018, 23:19 9
outoftime, я с этим не знакома еще
0
outoftime
║XLR8║
764 / 663 / 212
Регистрация: 25.07.2009
Сообщений: 3,320
Записей в блоге: 5
17.02.2018, 23:24 10
Цитата Сообщение от Kitas Посмотреть сообщение
я с этим не знакома еще
Есть аналог в STL http://ru.cppreference.com/w/cpp/regex/regex_match
Да и, собственно, регулярные выражение
0
Kitas
0 / 0 / 0
Регистрация: 17.05.2017
Сообщений: 48
18.02.2018, 10:33 11
outoftime, спасибо, я попробую)
0
18.02.2018, 10:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2018, 10:33

Слова, состоящие только из гласных или только из согласных латинских букв
Разработать алгоритм и программу. Вводится тест из заглавных и строчных...

Напечатать слова, состоящие только из слогов
Дана последовательность слов в виде текстовой строки. Слова в...

Даны две символьные строки, состоящие только из цифр
Подскажите пожалуйста! Borland C++ Даны две символьные строки, состоящие...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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