Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Serjin
0 / 0 / 0
Регистрация: 30.11.2014
Сообщений: 22
#1

Ввод из файла в массив и нахождение наиболее встречающегося элемента

30.11.2014, 10:42. Просмотров 1156. Ответов 43
Метки нет (Все метки)

Добрый день (вечер)! Нужно написать программу так, чтобы она создавала файл из рандомных чисел, далее нужно вывести содержимое этого файла на экран, затем в этом содержимом файла найти наиболее встречающийся символ и заменить его на '+'. Я сделал так, чтобы файл создавался, выводился на экран, а вот как найти наиболее встречающийся символ и заменить его на '+' понять не могу. Мои мысли сводятся к тому, что нужно содержимое файла записать в строчный массив, затем уже с этим массивом работать и искать символы, но как это реализовать, не могу понять.
Вот код моих наработок :
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
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <ctime>
#include <stdio.h>
#include<time.h>
#include <cstdio>
#include <string>
#include <iostream>
#include <fstream>
#include <vector>
#include <Windows.h>
#include <stdio.h> 
#include <conio.h>
#include <string.h>
using namespace std;
void fun1();
void fun2();
void fun3();
void fun4();
void fun5();
char i;
char *Array = new char(10);
char *k = new char(1);
const char N=20;
int main(){
while (1)  {
    setlocale (0,"");
      cout<<"1.Сгенерировать \n"<<"2.Показать \n"<<"3.Изменить \n"<<"4.Об Авторе \n"<<"5.Выход \n";
      int n;
      cin>>n;
      switch (n) {
             case 1: fun1(); break;
             case 2: fun2(); break;
             case 3: fun3(); break;
             case 4: fun4(); break;
             case 5: return 0; break;
             default: cout<<"Не выбран пункт меню \n"; break;
             }
      }    
}
void fun1() {
        setlocale (0,"");
     srand(time(0));
ofstream file("t.txt");
for(i=0; i<10; i++)
file<<(char)(rand()%91+32);                                                                                
     }
void fun2() {
ifstream file("t.txt");
while (!file.eof())
{
for (char i=0;i<N;i++)
{ 
file.get(Array[i]);
}
Array[i] = '\n';
for (char j = 0; j < i; ++ j)
cout << Array[j];
cout<<"\n";                                                                                                  
}    
}
void fun3() {
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2014, 10:42
Ответы с готовыми решениями:

Найти в массиве и вывести значение наиболее часто встречающегося элемента
Здравствуйте вы мне можете помочь? вот условие задачи, её надо сделать на...

Найти в массиве и вывести значение наиболее часто встречающегося элемента.
ПАцаны помогите, попадаю... отблагадарю... 1. Найти в массиве и вывести...

Нахождение номера элемента строки - C++ через ввод вывод
Задача. Дано целое число n и набор из n целых чисел . Найти номера первого и...

Ввод из файла в массив
Приветствую. Вопрос, конечно, проще некуда... но всё же. Как организовать...

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

43
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
30.11.2014, 10:54 #2
Serjin, тебе объяснить алгоритм или написать пример?
0
zss
Модератор
Эксперт С++
7096 / 6627 / 4196
Регистрация: 18.12.2011
Сообщений: 17,473
Завершенные тесты: 1
30.11.2014, 10:55 #3
1. Зачем столько инклюдов?
2. Не используйте глобальные переменные без КРАЙНЕЙ необходимости.
3. По существу вопроса. Заведите целочисленный массив на 256 шт и обнулите.
Далее читайте файл посимвольно и увеличивайте на 1 элемент массива с номером равным коду прочитанного символа: file>>c;a[c]++;
Когда файл закончится найдите в массиве максимальный элемент. Номер его и будет кодом, который надо менять.
0
Serjin
0 / 0 / 0
Регистрация: 30.11.2014
Сообщений: 22
30.11.2014, 11:11  [ТС] #4
А можете мне это реализовать на коде, а то я только начал изучать c++ и для меня это сделать будет очень сложно, много инклудов, так как я на разных сайтах много чего вычитывал и пытался реализовать, потом все стирал, так как не получалось и не удалили инклуды.

Добавлено через 45 секунд
ыфырф1992 , лучше написать пример, основываясь на моем коде, заранее спасибо
0
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
30.11.2014, 11:15 #5
Serjin, вы изучаете для себя или чтобы на семестр или 2 сдать лабы и забыть? Если для себя у вас не правильный подход к изучению.
0
Serjin
0 / 0 / 0
Регистрация: 30.11.2014
Сообщений: 22
30.11.2014, 11:19  [ТС] #6
Мне это задали на семестре, но я раньше не изучал программирование, теперь приходится все искать и изучать

Добавлено через 1 минуту
Я уже 2 дня сижу над программой и не могу понять, как заставить ее это сделать, перечитал кучу статей и все не то, вот теперь прошу помощи у знающих людей, чтоб хоть как-то понять, как это можно реализовать
0
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
30.11.2014, 11:21 #7
Сейчас нет времени, если раньше не ответят поздно ночью напишу программу. Если хотите действительно что то понимать то надо с начало читать книгу, из статей получается каша вы много не понимаете
1
Serjin
0 / 0 / 0
Регистрация: 30.11.2014
Сообщений: 22
30.11.2014, 11:23  [ТС] #8
Спасибо, буду ждать вашу программу, у меня вопрос, я правильно вывел содержание файла на экран?

Добавлено через 45 секунд
или можно было бы сделать все намного легче?
0
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
30.11.2014, 11:32 #9
Serjin, не самый плохой вариант, тем более массив вам будет нужен так что тут все нормально. Для вашего уровня знаний не нужно использовать функции. Можно было сделать компактнее. считал символ в массив тут же его вывел и т.д. инклюдов нужно всего несколько или даже 1. Не нужно использовать глобальные переменные.

Добавлено через 24 секунды
хотя нет простите, а программа что то выводит мне аж интересно стало??

Добавлено через 49 секунд
0
Serjin
0 / 0 / 0
Регистрация: 30.11.2014
Сообщений: 22
30.11.2014, 11:33  [ТС] #10
Нет, при нажатие цифорки '2' , я просто смотрю, какие символы у меня t.txt записались
0
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
30.11.2014, 11:34 #11
C++
1
char j = 0; надо int j=0;
0
Serjin
0 / 0 / 0
Регистрация: 30.11.2014
Сообщений: 22
30.11.2014, 11:37  [ТС] #12
а далее мне нужно изменить содержание файла так, как я описывал ранее

Добавлено через 31 секунду
А разве int j мне не даст работы только с цифрами?

Добавлено через 2 минуты
Попробовал исправить, вывел тоже самое, суть не изменилась, спасибо за подсказку
0
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
30.11.2014, 11:40 #13
Суть не меняется потому, это 1 из многих ошибок. Вы не понимаете что такое массивы и как они работают.
C++
1
char i=0; надо int i=0;
0
Serjin
0 / 0 / 0
Регистрация: 30.11.2014
Сообщений: 22
30.11.2014, 11:42  [ТС] #14
Спасибо, очень буду ждать ваше программы чтобы понять, как надо было все-такие ее написать и буду разбираться почему так, а сейчас пойду почитаю про массив.
0
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
30.11.2014, 11:46 #15
Serjin, нет вам массивы пока рано, прата язык программирования с++ лекции и упражнения 2011. Начинайте читать со 2 главы. Даже если что то знаете все равно читайте и делайте упражнения, у вас слишком большие пробелы в знаниях

Добавлено через 18 секунд
Программу я вам напишу и объясню
0
Serjin
0 / 0 / 0
Регистрация: 30.11.2014
Сообщений: 22
30.11.2014, 11:47  [ТС] #16
Спасибо большое за подсказки и наводки, очень буду ждать вашей помощи!
0
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
30.11.2014, 15:05 #17
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
#include <iostream>
#include <fstream>
#include <ctime>
#include <string>
using namespace std;
int main(){
while (1)  {
    setlocale (LC_ALL,"RUSSIAN");
      cout<<"1.Сгенерировать \n"<<"2.Показать \n"<<"3.Изменить \n"<<"4.Об Авторе \n"<<"5.Выход \n";
      int n;int const g=8;
      cin>>n;
      switch (n) {
             case 1:
                 { 
                    srand(time(0));
                    ofstream file;
                    file.open("t.txt");
                    for(int i=0; i<g; i++) file<<(char)(-(rand()%32+1)); 
                    file.close();
                    break;
                 }
             case 2:{
                    ifstream file;
                    file.open("t.txt");
                    string a; 
                    while (!file.eof())
                        {
                            file>>a;
                            cout<<a;
                    }
                    file.close();cout<<a<<endl;
                    break;
                    }
                    
                    
             case 3:
                 {
                    ofstream f;
                     ifstream file;
                    file.open("t.txt");
                    char a[g+1]={0},b;
                    while (!file.eof())
                        {
                            file>>a;
                        }
                    int schetchik=0,c=0;
                    for (int i=0;i<g-1;i++)
                    {
                        for (int j=0;j<g;j++)
                        {
                            if (a[i]==a[j]) schetchik+=1;
                        }
                        if (schetchik>c) {c=schetchik;b=a[i];}
                        schetchik=0;
                    }
 
                    for (int i=0;i<g;i++)
                    {
                        if (a[i]==b) a[i]='+';
                    }
                    file.close();
                    f.open("t.txt");
                    f<<a; f.close();cout<<endl;
                    break;
                 }
             case 4:cout<<"об авторе";cout<<endl; break;
             case 5:return 0;break;
             default: cout<<"Не выбран пункт меню \n"; break;
             }
      }   
 
 
 
}
Программа работает, но я не делал обработку ислючений, например вы запустили програму в самый первый раз и вместо сгенерировать жмете, вывести. Или если например а и б встречаются по 2 раза, плюсами заменит только а.
2
Serjin
0 / 0 / 0
Регистрация: 30.11.2014
Сообщений: 22
30.11.2014, 15:12  [ТС] #18
Спасибо большое, буду сейчас разбираться. Очень благодарен.

Добавлено через 2 минуты
Что-то у меня она не выполняется, выдает ошибку, что 'srand' и 'rand' не определен

Добавлено через 2 минуты
Хм, странно, в Dev C++ не выполняется, а если компилирую через visual studio 2012, то все работает
0
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
30.11.2014, 15:15 #19
Serjin, добавьте
C++
1
#include <сstdlib>
Добавлено через 1 минуту
возможно есть какой то метод в программе привязанный к определенному компилятору, на первый взгляд я таких не вижу. с добавлением библиотеки и в дев должно заработать
0
Serjin
0 / 0 / 0
Регистрация: 30.11.2014
Сообщений: 22
30.11.2014, 15:17  [ТС] #20
после добавления библиотеки Dev c++ пишет "сstdlib: No such file or directory "
0
30.11.2014, 15:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2014, 15:17

Ввод данных в массив с файла с++
есть файл input.txt в нем 2 строки, на первой - одно число(размер массива), на...

Ввод данных в динамический массив из файла
В задаче написано: введение данных в динамический массив делать из файла. Как...

Ввод данных из файла в двумерный массив
Здравствуйте! Я написал такую программу: #include &lt;iostream&gt; #include...


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

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

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