1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 62
1

Запись из файла русских слов в другой файл

09.05.2019, 15:23. Показов 3654. Ответов 11
Метки нет (Все метки)

Дан файл, состоящий из строк, которые могут начинаться либо с русских, либо с английских слов. Записать в другой файл, только те строки, которые начинаются с русских слов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "pch.h"
#include <iostream>
#include <fstream>
 
int main()
{
    std::ifstream in("input.txt");
    std::ofstream ou("output.txt");
    while (!in.eof()) 
{
const char uo[] = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
.
.
}
    in.close();
    ou.close();
    return 0;
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2019, 15:23
Ответы с готовыми решениями:

Запись в файл. Функция ввода русских слов
Код дал преподаватель, не реализуется функция Readline, выдает две ошибки: Ошибка 1 error...

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

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

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

11
1 / 1 / 0
Регистрация: 13.12.2010
Сообщений: 11
09.05.2019, 16:05 2
Ключевой момент - отличение русских слов от английских. Если проверяемое слово представлено как string word, то может быть такое решение.
C++
1
2
3
4
5
6
7
#include <string>
...
  bool eng = false;
  for (unsigned i = 0; i < word.size() && ! eng; ++i) {
    if (! strchr (uo, toupper (word[i])))
      eng = true;
  }
1
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 62
09.05.2019, 17:10  [ТС] 3
RostKudr, а можно ли сделать так что если русские буквы имеют ASCII>122 их пишем в файл. видел такое в вижуал бейсике
0
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 62
10.05.2019, 19:29  [ТС] 4
Ребят есть тут кто нибудь. Помогите пожалуйста
0
Эксперт С++
8718 / 4299 / 957
Регистрация: 15.11.2014
Сообщений: 9,743
10.05.2019, 19:46 5
Цитата Сообщение от dimka121297 Посмотреть сообщение
а можно ли сделать так что если русские буквы имеют ASCII>122 их пишем в файл
идея верная. только не 122, а symbol >= 0 && symbol <= 127

по условию задачи:
Цитата Сообщение от dimka121297 Посмотреть сообщение
либо с русских, либо с английских слов
значит, если не английская, то стало быть русская.

английские буквы в любых кодировках совпадают с ASCII.
проверить можно так:
C++
1
2
3
4
5
6
template<class ch>
bool is_ascii(const ch symbol) noexcept 
{
    const auto code = static_cast<int>(symbol);
    return code >= 0 && code <= 127;
}
итого:
C++
1
2
3
for(const auto& line: lines)
    if(!line.empty() && !is_ascii(line[0]))
        writeRussian(line);
1
593 / 429 / 135
Регистрация: 22.11.2017
Сообщений: 1,212
10.05.2019, 20:13 6
dimka121297, ещё раз привет!
У меня работает.

Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <string>
#include <fstream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    ifstream in("text.txt");
    ofstream ou("output.txt");
    for (; in.good();)
    {
        string line;
        getline(in, line);
        if (
            line[0u] >= 'а' &&
            line[0u] <= 'п' ||
            line[0u] <= 'р' &&
            line[0u] <= 'я' ||
            line[0u] >= 'А' &&
            line[0u] <= 'Я' ||
            line[0u] == 'Ё' ||
            line[0u] == 'ё'
            )
        {
            ou << line << "\n";
        }
    }
    in.close();
    ou.close();
 
    system("pause");
    return 0;
}
1
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 62
10.05.2019, 20:14  [ТС] 7
Перечитав задание вдруг понял: Что например у нас три строки
1строка: Привет hello welcome
2строка: Hello привет как дела
3строка: Как дела my friend
Мы должны найти строки которые начинаются с русских слов, а это 1 и 3 строка. Программа должна просто проверить первое слово на русские буквы и вывести полностью всю строку в другой документ
0
593 / 429 / 135
Регистрация: 22.11.2017
Сообщений: 1,212
10.05.2019, 20:21 8
dimka121297, я так и сделал в коде.
Там не первое слово проверяется, а его первая буква.

В предыдущем кодя я ошибся. Найди отличие.

Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <string>
#include <fstream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    ifstream in("text.txt");
    ofstream ou("output.txt");
    for (; in.good();)
    {
        string line;
        getline(in, line);
        if (
            line[0u] >= 'а' &&
            line[0u] <= 'п' ||
            line[0u] >= 'р' &&
            line[0u] <= 'я' ||
            line[0u] >= 'А' &&
            line[0u] <= 'Я' ||
            line[0u] == 'Ё' ||
            line[0u] == 'ё'
            )
        {
            ou << line << "\n";
        }
    }
    in.close();
    ou.close();
 
    system("pause");
    return 0;
}
1
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 62
10.05.2019, 20:31  [ТС] 9
SomniPhobia, Да ну. Вот это да! Спасибо большое еще раз. Пойми, я не могу тебя просто так оставить, поэтому скинь мне в лс свои данные от чего либо, скину тебе небольшую сумму денег. хоть как нибудь тебя отблагодарить ))
0
Эксперт С++
8718 / 4299 / 957
Регистрация: 15.11.2014
Сообщений: 9,743
10.05.2019, 20:58 10
Цитата Сообщение от SomniPhobia Посмотреть сообщение
У меня работает.
детский сад.

Цитата Сообщение от SomniPhobia Посмотреть сообщение
line[0u] >= 'а'
это не будет работать в общем случае.

1.
зависимость от кодировки файла-источника.
какая кодировка у файла "text.txt"?
1251?
utf-8?
utf-16?
ещё какая ни будь?

если английские буковки всегда совместимы с ascii (не зависимо от кодировки),
то байтовое представление национальных символов других языков
напрямую зависят от используемой кодировки.
национальный иероглиф какого ни будь китайского алфавита
вообще может быть представлен в виде последовательности из нескольких байт,
например.

2.
использование национального символа в исходном коде программы,
написанной на c++
Цитата Сообщение от SomniPhobia Посмотреть сообщение
>= 'а'
является locale-specific behavior

что означает:
компиляторы вообще не обязаны компилировать такой код.

например, компилятор gcc воспринимает кириллицу только:
- если национальные символы являются частью комментариев
(комментарии выпиливаются за ненадобностью на стадии препроцессора)
- если файл исходного кода сохранен в кодировке utf-8

во всех остальных случаях компилятор gcc пошлет такой код нафиг.

3.
ты извлекаешь код символа из файла в неизвестной кодировке,
и сравниваешь его с национальным символом описанном в файле-исходнике,
который так же может быть потенциально в черт знает какой кодировке.

на что ты вообще рассчитываешь?

теперь, я надеюсь, ты понял, почему твоё заявление:
Цитата Сообщение от SomniPhobia Посмотреть сообщение
У меня работает.
это - детский лепет.

у тебя работает.
в общем случае - даже не компилируется.
или компилируется, но не работает.


однако.
известно, что английские буквы независимо от использованной кодировки
всегда совпадают с ascii.

если ты хочешь написать качественное грамотное решение,
которое будет работать независимо от кодировок файлов,
то ты используешь эту особенность латинских букв.

и впредь, на будущие,
постараешься избегать связываться с locale-specific behavior
0
593 / 429 / 135
Регистрация: 22.11.2017
Сообщений: 1,212
10.05.2019, 21:01 11
hoggy, всё что Вы написали выше - Ваше мнение. Спасибо, информативно. То есть рекомендуете широкую строку? Можете не отвечать.
0
Эксперт С++
8718 / 4299 / 957
Регистрация: 15.11.2014
Сообщений: 9,743
10.05.2019, 21:10 12
Цитата Сообщение от SomniPhobia Посмотреть сообщение
всё что Вы написали выше - Ваше мнение.
"Земля - круглая" - это моё мнение? или факт?

locale-specific behavior, описанный в стандарте языка,
это - моё мнение? или факт?

стандарт говорит: гарантируется только сишная локаль (латинские буковки).
это - моё мнение? или факт?

Цитата Сообщение от SomniPhobia Посмотреть сообщение
То есть рекомендуете широкую строку?
с чего ты взял своё "то есть"?

моя рекомендация была:
Цитата Сообщение от hoggy Посмотреть сообщение
однако.
известно, что английские буквы независимо от использованной кодировки
всегда совпадают с ascii.
если ты хочешь написать качественное грамотное решение,
которое будет работать независимо от кодировок файлов,
то ты используешь эту особенность латинских букв.
и где ты здесь увидел хоть намёк на широкие строки?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2019, 21:10
Помогаю со студенческими работами здесь

Задан текстовый файл. Переписать в другой файл, те строки из первого файла, которые содержат менее 5 слов
Помогите решить задачу пожалуйста! Заданный текстовый файл. Переписать в другой файл, те строки из...

Считывание из файла и запись в другой файл
Есть словарик. В нем два слова пишутся через тире(дефис) слово1-слово2 также после них идет еще...

Считывание файла и запись в другой файл
Прошу проверить код на правильность. Задание следующее: Даны площади двух квадратов. Найти...

Чтение данных из файла и запись в другой файл
Что не так? почему ошибку выдаёт? Ввод имеет такой вид 2 1993 1994 1 1995


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

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

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