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

Вытянуть номер телефона - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ typeid и классы http://www.cyberforum.ru/cpp-beginners/thread805229.html
Разбираю пример с учебника: #include <iostream> #include <typeinfo> class myclass { int i; }; int main()
C++ Не могу прочитать файл произвольного доступа с конца Странное происходит в функции read_file, а именно не работает seekg. Почему-то читается всё время последнее значение. Почему так и что с этим делать? QtCreator 2.4.1, XP. #include <iostream> #include <fstream> #define N 10 using namespace std; void write_file(); http://www.cyberforum.ru/cpp-beginners/thread805218.html
Генератор "старт-стоп"_реализация В С++, проверьте правильность написания C++
Доброго времени суток. Можете проверить правильность работы программы для данного задания. Заранее огромное спасибо! программа для чередующегося генератора «стоп-пошел», псевдослучайной последовательности, с генерированной, в последовательность равную периоду генератора. значения LFSR: (7,1,0); (23,5,0); (17,6,0). Листинг:
Что такое forward декларация функции? C++
Вот в этом примере узнал об этом : struct S { static int i; S() { ++i; } S(const S&) { ++i; } }; int S::i = 0; int main() { S v(S());
C++ Как искать в файле и записать его в новый файл? http://www.cyberforum.ru/cpp-beginners/thread805201.html
Здравствуйте вот не могу никак решить проблему и за ранее спс кто откликнется и поможет в это нелегкой задачке не понимаю как искать в файле и записать его в новый файл уже третий день сижу кто сможет помогите Дан текстовый файл. Записать в новый текстовый файл все строки исходного файла, которые в качестве фрагмента содержат строку Str. int main() { setlocale(LC_ALL,"");
C++ указатели на функцию Доброго времени суток! Вот читал про указатели на функцию, и столкнулся с такой проблемой... Допустим, есть такой код: #include "stdafx.h" #include <iostream> using namespace std; void print(const char *temp) { wcout << temp; подробнее

Показать сообщение отдельно
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.03.2013, 18:06     Вытянуть номер телефона
Нет универсалного кода. Каждый - под какие-то условия. Сложноватое решение я предложил в 4 посте. Можно просто схранить последние 14 символов строки и удалить тире и последнюю точку. Но это к слову...
Если без регулярных выражений, то можно как-то так:
Кликните здесь для просмотра всего текста
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <iostream>
#include <string>
#include <cctype>
#include <cstdlib>
using namespace std;
 
// если между индексами только цифры, то вернёт true
inline bool f(const string &str, int first, int last)
{
    for (int i = first; i < last; i++)
        if (!isdigit((unsigned char)str[i])) return false;
    
    return true;
}
 
// проверка номера на правильность
bool fnamberpar(string &namber)
{
    // 050-123-45-67
    
    int i1 = 3; int i2 = 7; int i3 = 10; // индексы '-'
    const int N = 13; // количество символов
    
    // количество символов, нидексы '-'
    if (namber.size() != N   ||
        namber[i1]    != '-' ||
        namber[i2]    != '-' ||
        namber[i3]    != '-'   ) return false;
 
    // если до тире и после тире только цифры
    if (f(namber,  0,       i1) &&
        f(namber, (i1 + 1), i2) &&
        f(namber, (i2 + 1), i3) &&
        f(namber, (i3 + 1),  N))   
        {
            // удаляем '-'
            namber.erase(i1    , 1);
            namber.erase(i2 - 1, 1);
            namber.erase(i3 - 2, 1);
            
            return true;
        }
    
    else return false;       
 }
 
int main()
{
    // В тексте номер из 13 символов: три цифры, тире
    // три цифры, тире, две цифры, тире, две цифры. Перед номером
    // (если не в начале текста) пробел. После номера - или пробел, или точка.
    
    setlocale(0, "");
    
    string str = "Привет, меня зовут Саша.\n"
    "Мой номер  телефона 050-123-45-67.";
    
    string namber;
    int i, j;
    
    // ищем цифру, если не первая, то перед цифрой должен быть пробел
    for (i = 0; i < str.size(); ++i)
    {
        if ((isdigit((unsigned char)str[0])) ||
           (isdigit((unsigned char)str[i]) && str[i - 1] == ' '))
        {
            // если цифра найдена, то эту цифру и цифры, и тире после неё
            // добавляем в строку номера 
            for (j = i; j < str.size(); j++)
            {
               if (isdigit((unsigned char)str[j]) || str[j] == '-') namber.push_back(str[j]);
               else break; // если встретилась не цифра и не тире
            }
            // если символ не последний в строке, 
            // и после него нет пробела или точки, то продолжаем поиск
            if ((j < str.size()) &&  (str[j] != ' ') && (str[j] != '.'))
            {
                i = j;
                continue;
            }
            // если есть, то проверем номер на правильность
            if (fnamberpar(namber))
            {
                cout << "Номер найден: " << namber << endl;
                break;
            }
            
        }
    }
    
    // если цифра, перед которой пробел (если не первая), не найдена, 
    // или номер не прошёл проверку на правильность
    if (i == str.size()) cout << "Номер не найден" << endl;
    
    system("pause");
    return 0;
}
 
Текущее время: 13:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru