Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
4 / 2 / 2
Регистрация: 23.10.2018
Сообщений: 59
1

Создать строку, которая будет содержать набор символов содержащихся в файле

29.11.2018, 21:07. Просмотров 1267. Ответов 9

Открыть файл, имя которого задается с клавиатуры. Создать строку, которая будет содержать набор символов содержащихся в файле (каждый символ должен входить в строку по одному разу). Записать полученную строку в другой файл. Помогите пожалуйста, напишите код
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2018, 21:07
Ответы с готовыми решениями:

Создать строку, которая будет содержать набор символов содержащихся в файле
8. Открыть файл, имя которого задается с клавиатуры. Создать строку, которая будет содержать набор...

Создать строку, которая будет содержать набор символов содержащихся в файле
Открыть файл, имя которого задается с клавиатуры. Создать строку, которая будет содержать набор...

Дана строка S. На её основе создать новую строку символы, которая вместо цифр будет содержать их название.
Дана строка S. На её основе создать новую строку символы, которая вместо цифр будет содержать их...

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

9
4 / 2 / 2
Регистрация: 23.10.2018
Сообщений: 59
05.12.2018, 17:23  [ТС] 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
#include<iostream>
#include<conio.h>
#include <fstream>
using namespace std;
 
bool check(char*str, char ch)//описываем функцию, которая будет проверять наличие символа в строке
{
    for (int i = 0; i < strlen(str); i++)
        if (str[i] == ch) return false;//если символ найден, возращаем false
    return true;//иначе будет воращена true
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    char *name_file_1 = new char[20];//обявляем строку для имени файла
    char *str_for_file_2 = new char[256];//объявляем строку, в которой будут содержаться символы из первого файла без повторений
    char ch;
    int k = 0;//счётчик символов в строке str_for_file_2
    ifstream file1;//объявляем файл для чтения 
    do {
        cout << "Введите имя файла: ";
        cin >> name_file_1;
        file1.open(name_file_1);//пытаемся открыть файл с введёным именем
    } while (!file1);//пока файл не открыт
    cout << "\nИсходный файл:\n";
    while (!file1.eof())//пока не конец файла
    {
        ch = file1.get();//получаем один символ из file1
        cout << ch;//выводим его на экран
        if (check(str_for_file_2, ch)) str_for_file_2[k++] = ch;//если данного символа ещё нет в строке str_for_file_2
    }
    str_for_file_2[k] = '\0';//добавляем признак конца строки после записи всех символов без повторений из file1
    cout << "\n\nПолученная строка: \n" << str_for_file_2;
    ofstream file2("test_save.txt");//объявляем файл для записи
    file2 << str_for_file_2;//записываем в файл полученную строку символов
    file1.close();//закрываем file1
    file2.close();//закрываем file2
    _getch();
    return 0;
}


Я написал код, и он работает хорошо, но до момента вывода, в выводе пишутся вообще не те символы, не понимаю в чём проблема, помогите. Возможно ошибка в цикле в конце, но я не уверен
0
4 / 2 / 2
Регистрация: 23.10.2018
Сообщений: 59
07.12.2018, 17:27  [ТС] 3
Тема всё ещё актуальна! Дорогие форумчане, подскажите советом\кодом, всем благ!
0
117 / 92 / 35
Регистрация: 18.12.2012
Сообщений: 643
07.12.2018, 17:31 4
Покажите пример исходного файла и выходной строки.
0
4 / 2 / 2
Регистрация: 23.10.2018
Сообщений: 59
07.12.2018, 17:47  [ТС] 5
alkl, держите) Здесь выводится дополнительная буква "я" и он не видит пробела.

На самом деле - "Исходный файл:
iddqd wuake doom"
Вывод:
Кликните здесь для просмотра всего текста
Исходный файл:
iddqd wuake doomя

Полученная строка:
idq wuakeomя
0
Модератор
Эксперт С++
10240 / 8564 / 5192
Регистрация: 18.12.2011
Сообщений: 22,914
07.12.2018, 18:01 6
Лучший ответ Сообщение было отмечено Sir9000 как решение

Решение

Лишний символ (буква "я" == EOF) - это чтение за концом файла

Лучше так:
C++
1
2
3
4
5
6
while ( (ch = file1.get())!=EOF )//пока не конец файла
    {
        cout << ch;
        if ( check(str_for_file_2, ch) ) 
              str_for_file_2[k++] = ch;
    }
1
4 / 2 / 2
Регистрация: 23.10.2018
Сообщений: 59
07.12.2018, 19:21  [ТС] 7
zss спасибо большое, но вывод всё равно не так точно работает(как бы мне хотелось).
Получается он считает пробелы как за уже использованные символы?
0
117 / 92 / 35
Регистрация: 18.12.2012
Сообщений: 643
07.12.2018, 19:29 8
Цитата Сообщение от Sir9000 Посмотреть сообщение
Получается он считает пробелы как за уже использованные символы?
Так у Вас так и есть.
Цитата Сообщение от Sir9000 Посмотреть сообщение
Исходный файл:
iddqd wuake doomя

Полученная строка:
idq wuakeomя
Один пробел потерялся.

Добавлено через 2 минуты
И ещё, непонятен один момент.
Цитата Сообщение от Sir9000 Посмотреть сообщение
каждый символ должен входить в строку по одному разу
Получается, каждый символ должен быть один во все строке (включая все слова) или только в пределах одного слова (между пробелами) ?
1
4 / 2 / 2
Регистрация: 23.10.2018
Сообщений: 59
07.12.2018, 19:33  [ТС] 9
Во всей строке
Цитата Сообщение от alkl Посмотреть сообщение
И ещё, непонятен один момент.
Сообщение от 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
32
33
34
35
36
37
38
39
40
41
#include<iostream>
#include<conio.h>
#include <fstream>
using namespace std;
 
bool check(char*str, char ch)//описываем функцию, которая будет проверять наличие символа в строке
{
    for (int i = 0; i < strlen(str); i++)
    if (str[i] == ch) return false;//если символ найден, возращаем false
    return true;//иначе будет воращена true
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    char *name_file_1 = new char[20];//обявляем строку для имени файла
    char *str_for_file_2 = new char[256];//объявляем строку, в которой будут содержаться символы из первого файла без повторений
    char ch;
    int k = 0;//счётчик символов в строке str_for_file_2
    ifstream file1;//объявляем файл для чтения 
    do {
        cout << "Введите имя файла: ";
        cin >> name_file_1;
        file1.open(name_file_1);//пытаемся открыть файл с введёным именем
    } while (!file1);//пока файл не открыт
    cout << "\nИсходный файл:\n";
    while ((ch = file1.get()) != EOF)//пока не конец файла
    {
        cout << ch;
        if (check(str_for_file_2, ch))
            str_for_file_2[k++] = ch;
    }
    str_for_file_2[k] = '\0';//добавляем признак конца строки после записи всех символов без повторений из file1
    cout << "\n\nПолученная строка: \n" << str_for_file_2;
    ofstream file2("test_save.txt");//объявляем файл для записи
    file2 << str_for_file_2;//записываем в файл полученную строку символов
    file1.close();//закрываем file1
    file2.close();//закрываем file2
    _getch();
    return 0;
}
0
117 / 92 / 35
Регистрация: 18.12.2012
Сообщений: 643
07.12.2018, 19:38 10
Если вдруг захотите исключать пробелы (да вообще, любые символы) замените вот это
C++
1
if (str[i] == ch) return false;
на
C++
1
if (str[i] == ch && str[i] != ' ') return false;
Или на любой символ, вместо пробела.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2018, 19:38

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

Создать структуру, которая будет включать в себя какой-то набор структур-компонент
Всем привет! Есть несколько структур-компонент, выбор структуры зависит от некоторого условия...

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

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

Создать dll, которая будет содержать сортировку вставками
хочу создать dll, которая будет содержать сортировку вставками. как это сделать? (сортировку писать...


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

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

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