4 / 2 / 2
Регистрация: 23.10.2018
Сообщений: 61
1

Открыть файл, имя которого задается с клавиатуры. Переписать в новый файл только те слова, которые состоят из цифр

23.10.2018, 21:25. Показов 5214. Ответов 8

Студворк — интернет-сервис помощи студентам
В коде надо сделать так, чтобы он находил цифры, а не игнорировал их, и, по возможности выводил на экран, или другой нормальный вывод вроде: " Не удалось переписать т.к. в тексте нет цифр". Прошу написать код, как ламер или студент или оставить комменты с пояснением кода. Спасибо за внимание!
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
#include<iostream>  
#include <set>
#include<windows.h>
#include<iomanip>
#include<math.h>
#include<conio.h>
#include<String.h>
#include<ctype.h>
#include <stdlib.h>
#include <string>
#include <cstdlib>
#include <fstream> // Этот файл обеспечивает работу с файлами
using namespace std;
 
 
 
int main()
{
    do
    {
 
    if (SetConsoleCP(1251) == 0)
    {
        cerr << "Fialed to set codepage!" << endl;
    }
    if (SetConsoleOutputCP(1251) == 0)
    {
        cerr << "Failed to set OUTPUT page!" << endl;
    }
    ifstream ifl; ofstream outl; // Объявляем файл для чтения и вывода
    char ch;
    char name[20]; // Имя файла
    do /* Цикл, который повторяет ввод имени файла до тех пор, пока оно не будет   задано правильно */
    {
        int i = 0; // Счетчик символов
        cout << "Задайте имя файла: ";
        while ((ch = _getche()) != '\r') /* Посимвольное чтение имени позволит прервать цикл в любой момент при нажатии клавиши <Esc> (конечно, это не обязательно) */
        {
            if (ch == 27) exit(0);
            else name[i++] = ch;
        }
        cout << "\n";
        name[i] = '\0';
        ifl.open(name, ios::in); // пытаемся открыть файл
        if (!ifl.is_open())
            // Если файл не открыт, выводим окно с сообщением об ошибке
        {
            cout << "Файл не найден!\n"; ch = _getch();
            if (ch == 27) exit(0); /* Можно прервать программу, увидев сообщение */
        }
    } while (!ifl); // пока файл не открыт
 
    string str;
    set<char> st{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' };
    int i = 0;
    while (!ifl.eof())
    {
        for (i = 0; i < str.size(); ++i)
        {
            if (st.find(str[i]) != st.end())
            {
                break;
            }
        }
        if (str.size() == i)
        {
            outl <<  str << endl;
        }
    
        ifl.close();
        outl.close();
    }
    cout << str << endl;
}
    
    while (_getch() != 27);
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2018, 21:25
Ответы с готовыми решениями:

Открыть файл, имя которого задается с клавиатуры. Посчитать количество байт в этом файле. Первую половину прочитанного файла записать в другой файл.
ребят помогите! плиз!!1. Открыть файл, имя которого задается с клавиатуры. Посчитать и вывести на...

Лабораторная работа номер 5 задание 1! Открыть файл, имя которого задается с клавиатуры. Посчитать и вывести на эк-ран количество байт в этом файле
Лабораторная работа номер 5 задание 1!!!! Открыть файл, имя которого задается с клавиатуры....

Открыть файл, имя которого задается из командной строки
Проблема в том, чтобы открыть файл, имя которого пользователь впечатывает в консоли Когда пытаюсь...

Открыть файл, имя которого задается из командной строки
В файле записана непустая последовательность целых чисел. Нужно открыть файл на чтение, НО имя...

8
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
23.10.2018, 22:28 2
Лучший ответ Сообщение было отмечено Sir9000 как решение

Решение

Sir9000, здравствуйте! Вот простой вариант того, что можно сделать:

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
#include <iostream> 
#include <string> 
#include <algorithm> 
#include <fstream>
 
    using namespace std;
 
int main() {
    string str, fname;
    cout << "Enter a file name: ";
    getline(cin, fname);
    ifstream fin(fname);
    if (fin.good()) {
        ofstream fout("output.txt");
        while (getline(fin, str)) {
            if (!any_of(str.begin(), str.end(), [&](char ch) {return !isdigit(ch); })) {
                fout << str << "\n";
            }
        }
        fin.close();
        fout.close();
    } else {
        cout << "Such a file wasn't found!\n";
    }
    system("pause");
    return 0;
}
1
4 / 2 / 2
Регистрация: 23.10.2018
Сообщений: 61
24.10.2018, 16:30  [ТС] 3
А можно ли сделать так чтобы копировались не только строки, но и просто слова? Спасибо за помощь!
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
24.10.2018, 18:09 4
Sir9000, здравствуйте! А чем разделены слова? Если просто пробелами и/или переносами строк, то считывайте так:

C++
1
2
3
4
5
while (fin >> str) {
    if (!any_of(str.begin(), str.end(), [&](char ch) { return !isdigit(ch); })) {
        fout << str << "\n";
    }
}
Если есть знаки препинания, то нужно разбивать по-другому.
1
4 / 2 / 2
Регистрация: 23.10.2018
Сообщений: 61
24.10.2018, 21:30  [ТС] 5
Fixer_84, Рад видеть Вас! Слова разделяются пробелами, но в вывод выводится только 2 и 3 строки. Привожу пример ввода и желаемого вывода.
Текст который в файле in.txt
Кликните здесь для просмотра всего текста

312467898y43 knghn fhiy99856 876788
6567567568
56856856899090
g9g0g0


И который должен выводиться в файл output.txt
Кликните здесь для просмотра всего текста

31246789843 99856 876788
6567567568
56856856899090
900
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
25.10.2018, 16:38 6
Sir9000, здравствуйте! Это еще одна задача, которую нужно решить? В теме сообщения нужно было вывести только те слова, которые целиком состоят из цифр и я написал код. Для вашего же вывода выше, получается, что нужно просто удалить в текстовом все символы, которые не являются цифрами. Верно?
0
4 / 2 / 2
Регистрация: 23.10.2018
Сообщений: 61
26.10.2018, 08:52  [ТС] 7
Fixer_94, рад видеть Вас! Да, надо вывести только слова состоящие из цифр, но в первой строке ввода "876788" не выводится. То есть он выводит только строки состоящие целиком из цифр, но слова состоящие целиком из цифр в строке не состоящей целиком из цифр он не выводит.
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
26.10.2018, 18:43 8
Лучший ответ Сообщение было отмечено Sir9000 как решение

Решение

Цитата Сообщение от Sir9000 Посмотреть сообщение
он выводит только строки состоящие целиком из цифр, но слова состоящие целиком из цифр в строке не состоящей целиком из цифр он не выводит
Здравствуйте! Тогда будет так:

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
#include <iostream> 
#include <string> 
#include <sstream> 
#include <algorithm> 
#include <fstream>
 
    using namespace std;
 
int main() {
    string s, word;
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    if (fin.good()) {
        while (getline(fin, s)) {
            stringstream str(s);
            while (str >> word) {
                if (!any_of(word.begin(), word.end(), [&](char ch) { return !isdigit(ch); })) {
                    fout << word << " ";
                }
            }
            str.clear();
            fout << "\n";
        }
    } else {
        cout << "Such a file wasn't found!\n";
    }
    fin.close();
    fout.close();
    system("pause");
    return 0;
}
Пример входных данных (файл input.txt):

abcd1234 789 abcd 1234
111 222 333
000 abcd 000abcd000
999

Выходные данные (файл output.txt):

789 1234
111 222 333
000
999

P.S. Прочитайте это, пожалуйста, внимательно:

Добавлено через 7 минут
Sir9000, я только одного не пойму. В посте #5 вы приводите пример входных и выходных данных. Но исходя из этого примера, вам нужно удалить из файла все символы, не являющиеся цифрами в словах и вывести это в другой файл. Это уже совсем другая задача. Вам и ее нужно решить?
1
4 / 2 / 2
Регистрация: 23.10.2018
Сообщений: 61
26.10.2018, 19:38  [ТС] 9
Fixer_84 спасибо Вам огромное! Другую задачу не нужно решать, СПАСИБО!!! //Я не могу в редактирование(
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2018, 19:38
Помогаю со студенческими работами здесь

Переписать в новый файл все слова, которые содержат только буквы латинского алфавита.
Переписать в новый файл все слова, которые содержат только буквы латинского алфавита. program k;...

Переписать в новый файл f2 только те символы, которые входят в файл f1 только один раз.
Пожалуйста, помогите написать программу. Задание: Сформировать файл f1 из 10 символов. Переписать в...

Задан текстовый файл f. Переписать в новый файл g все слова, которые начинаются с буквы к
Задан текстовый файл f. Переписать в новый файл g все слова, которые начинаются с буквы к.

Файл: Переписать в третий файл только те слова, которые есть и в первом и во втором исходных файлах
Здравствуйте, вынуждена обратиться за помощью в решении следующей задачи: &quot;Даны два текстовых...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru