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

Нужно чтобы программа искала в txt первое слово, и выводила все остальное, что есть в строке - C++

Восстановить пароль Регистрация
 
olia90
 Аватар для olia90
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 37
13.10.2013, 22:28     Нужно чтобы программа искала в txt первое слово, и выводила все остальное, что есть в строке #1
Привет. У меня проблемы с программой. Нужно чтобы программа искала в txt первое слово, и выводила все остальное, что есть в строке. Если есть числа в строке, то нужно чтобы программа запрашивала у пользователя, желает ли он изменить это число.
Я написала прогу на счет вывода строки, а вот как с числами? не знаю.
И еще одно, спасибо пацаны.
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
//Main.cpp
 
#include <fstream>
#include <iostream>
#include "tort.h"
 
using namespace std;
 
const char filename[]= "torty.txt";
int main ()
{const int max_record=5;
Tort tort[max_record];
char buf [t_buf+1];
char name [t_name+1];
 
 
ifstream fin(filename);
if (!fin) {cout<<"Don't found"<<endl;}
 
int i=0;
while (fin.getline(buf, t_buf))
    {if (i>=max_record)
            {cout<<"Za velukuj fail"<<endl;
             return 1;
            }
        tort[i].SetName(buf);
        tort[i].SetKus (buf);
        i++;
}
 
int n_record=i, n_tort=0, mean_kus=0;
 
while (true) 
     {cout<<"Vvedit imja torta, abo slovo end  ";
      cin>>name;
      if (0 == strcmp(name, "end"))
      break;
 
      bool not_found = true;
      for (i=0; i<n_record; ++i)
          {if (tort[i].CompareName(name))
               {
                tort[i].Print();
                n_tort++;
                mean_kus +=tort[i].GetKus();
                not_found=false;
                break;
               }tort[i].Big(name);
          }
      if (not_found)
          cout<<"Torta iz takum narizom ne znajdeno"<<endl;
 
if (n_tort)
    cout<<"."<<endl;
 
    system ("pause");
    return 0;
 
}
}
это описание класса
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
//tort.h
#include <iostream>
 
const int t_name=10;
const int t_kus=5;
const int t_buf=t_name+t_kus;
 
class Tort {
public :
    Tort (int tName=10);
    ~Tort();
    bool  CompareName (const char*) const;
    bool  CompareName2 (const char*) const;
    int   GetKus() const {return pkus;}
    char* GetName() const{return pName;}
    void Big(const char*) const;
    void Print() const;
    void Print2() const;
    void SetName(const char*);
    void SetKus (const char*);
 
 private:
        char* pName;
        int pkus;
        char* k;
        
};
а это все функции класса
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
//Tort.cpp;
#include <iostream>
#include <cstring>
#include "tort.h"
 
using namespace std;
 
Tort::Tort (int tName) {
    cout<<"Construktor are working"<<endl;
    pName=new char [tName+1];
}
Tort::~Tort () {
    cout<<"Destrutor are working"<<endl;
    delete [] pName;
}
 
void Tort::SetName(const char* fromBuf) {
    strncpy (pName, fromBuf, t_name);
    pName[t_name]=0;
}
 
void Tort::SetKus (const char* fromBuf){
    pkus=atoi(fromBuf+t_name);
}
 
bool Tort::CompareName(const char* name) const {
    if ((strstr(pName, name)) && (pName[strlen(name)]== ' '))
        return true;
    else 
        return false;
    
}
 
bool Tort::CompareName2(const char* name) const {
    if ((strstr(pName, name)) && (pName[strlen(name)]== pkus))
        return true;
    else 
        return false;
}
 
void Tort::Big(const char* name ) const{
    for(int j=0; j<20;j++)
    {if ((strstr(pName, name)) && (pName[strlen(name)]==j))
         {cout<<"U torta je kuskiv "<<j;
         }
    }
}
 
 
void Tort::Print() const {
    cout<<pName;
}
 
 
void Tort::Print2() const {
    cout<<pkus;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2013, 22:28     Нужно чтобы программа искала в txt первое слово, и выводила все остальное, что есть в строке
Посмотрите здесь:

Нужно что бы программа выводила время, затраченое на выполнение. C++
написать прогу чтобы выводила все лексикографически следующие перестановки C++
C++ Дана формула. необходимо чтобы программа работала и выводила значение
Даны два слова.Верно ли,что первое слово начинается на ту же букву,на которую заканчивается второе слово (работа с символами строки) C++
C++ есть программа , но нужно что то в ней заменить
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
14.10.2013, 01:36     Нужно чтобы программа искала в txt первое слово, и выводила все остальное, что есть в строке #2
В хедере нету гвардов (#ifndef #define #endif), зато есть глобальные переменные, которых быть не должно. Представьте, что ваш .h файл включат два раза в проект. Будет конфликт имен и попытка определения уже существующей переменной. А вы уверены, что оно вам надо, работать с динамической памятью? Тогда надо еще дописать конструктор копий и оператор присвоений.

Что значит есть числа в строке?
a56bc тут есть?
или проходит только такой вариант: eniki 45 beniki
В первом isdigit, во втором я бы через istringstream делал, но для вас если будет сложно, подойдет strtok (обязательно по скопированной строке) либо собственный велосипед, который пробегает по массиву и отделяет слова на пробелы.
olia90
 Аватар для olia90
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 37
14.10.2013, 19:13  [ТС]     Нужно чтобы программа искала в txt первое слово, и выводила все остальное, что есть в строке #3
проходит только такой вариант: eniki 45 beniki
Должно быть что-то типа такого: пользователь вводит слово eniki ему выводит --- eniki 45 beniki. Здесь пользователю приходит в голову сменить 45 на 12.????? И здесь я застряла. Никак не могу сообразиты как это сделать?
Походу с динамической памятью вы правы.
Я просто в тупике. Хоть об стену бейся. Помогите мне, пожалуйста.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
14.10.2013, 21:01     Нужно чтобы программа искала в txt первое слово, и выводила все остальное, что есть в строке #4
Еще два вопроса:
результат сохранять в тот же файл или можно в новый?
и подойдет ли такой вариант под слово для поиска eniki
eniki 34asdas
здесь имеется в виду пробел. Строка должна обязательно начинаться с этого слова или слово должно быть просто первым в строке?

Добавлено через 15 минут
И еще, что делать если в строке два числа? Спрашивать про каждое или только про первое?
olia90
 Аватар для olia90
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 37
14.10.2013, 22:36  [ТС]     Нужно чтобы программа искала в txt первое слово, и выводила все остальное, что есть в строке #5
"результат сохранять в тот же файл или можно в новый?"----это не имеет значения в какой вам угодно.

"и подойдет ли такой вариант под слово для поиска eniki
eniki 34asdas
здесь имеется в виду пробел."-----так пробел обязателен. вариант eniki 34asdas не подойдет.

"Строка должна обязательно начинаться с этого слова или слово должно быть просто первым в строке?"----в файле есть n-количество строк. Cлово должно быть просто первым в строке
Например : eniki 23 beniki
moroz 36 zamoroz
cvetik 16 semicvetik
пользователь вводит по желанию или eniki или moroz или cvetik. А ему выдает всю строку и вопрос на счет изменения числа в строке.

"И еще, что делать если в строке два числа? Спрашивать про каждое или только про первое?"---Вариант о двух числах не рассматривается. В файле в одной строке только одно число, если там их два, это уже считается ошибка в файле.

Обязательное условие: использования классов и перегруженного метода.
Спасибо, если вы это сделаете вы мой Ангел Спаситель. Спасибо.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
15.10.2013, 01:48     Нужно чтобы программа искала в txt первое слово, и выводила все остальное, что есть в строке #6
Цитата Сообщение от olia90 Посмотреть сообщение
Вариант о двух числах не рассматривается. В файле в одной строке только одно число, если там их два, это уже считается ошибка в файле.
Блин, а я уж сделал для n-чисел в строке( Жаль, ну оно для вас все равно было бы слишком мудрено.

Цитата Сообщение от olia90 Посмотреть сообщение
Обязательное условие: использования классов и перегруженного метода.
Вот это вообще непонятно зачем нужно, ну да ладно
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <algorithm>
#include <iterator>
#include <cctype>
 
typedef std::istream_iterator<std::string> input_str;
typedef std::ostream_iterator<std::string> output_str;
 
// прототип класса для работы со строкой
class Line
{
  public:
    Line();
    Line(const char *);
    Line(const std::string &);
 
    std::string getData() const;
    void setData(const char *);
    void setData(const std::string &);
    void modifyInt(const int);
    bool firstWordEqual(const std::string &);
    bool firstWordEqual(const char *);
    std::string findInt() const;
 
  protected:
    std::string data;
};
 
std::ostream & operator<< (std::ostream &, const Line &);
std::istream & operator>> (std::istream &, Line &);
 
// вспомогательная функция для определения, является ли слово числом (C++11)
bool isInt(const std::string &);
 
 
int main()
{
    std::ifstream ifs("input.txt");
    if (!ifs) return 1;
    std::ofstream o("output.txt");
    Line line; // создаем объект для работы со строкой
    std::string key; // слово для поиска
    std::cout << "Enter word to search: ";
    std::cin >> key;
 
    // пока удалось считать новую строку из файла
    while (ifs >> line)
    {
        // если первое слово в строке совпадает
        if (line.firstWordEqual(key))
        {
            std::cout << line << std::endl; // выводим строку на экран
            // если содержит числа в строке
            if (!line.findInt().empty())
            {
                std::cout << "Would you like to replace? (y/n) ";
                char ch;
                std::cin >> ch;
                // если решили заменить
                if (ch == 'y')
                {
                    int x;
                    std::cout << "Enter new int: ";
                    std::cin >> x;
                    line.modifyInt(x);
                }
            }
            o << line; // записываем полученную строку в файл
        }
    }
}
 
// реализация класса
Line::Line() : data()
{}
 
Line::Line(const char *c) : data(c)
{}
 
Line::Line(const std::string &s) : data(s)
{}
 
std::string Line::getData() const
{
    return data;
}
 
void Line::setData(const char *c)
{
    data.assign(c);
}
 
void Line::setData(const std::string &s)
{
    data = s;
}
 
void Line::modifyInt(const int x)
{
    // создаем объект istringstream и инициализируем его строкой
    std::istringstream ist(data);
    // создаем объект ostringstream для перехвата новой строки
    std::ostringstream ost;
    // заменяем в последовательности найденное число на новое
    std::replace_copy(input_str(ist), input_str(), output_str(ost),
        this->findInt(), " " + std::to_string(x) + " " );
    // заменяем строку на последовательность
    data = ost.str();
}
 
bool Line::firstWordEqual(const std::string &key)
{
    // создаем объект istringstream и инициализируем его строкой
    std::istringstream ist(data);
    std::string word;   // вспомогательное слово
    ist >> word;        // считываем первое слово из строки
    return word == key;
}
 
bool Line::firstWordEqual(const char *key)
{
    // создаем объект istringstream и инициализируем его строкой
    std::istringstream ist(data);
    std::string word;   // вспомогательное слово
    ist >> word;        // считываем первое слово из строки
    return word == std::string(key);
}
 
std::string Line::findInt() const
{
    // создаем объект istringstream и инициализируем его строкой
    std::istringstream ist(data);
    // пытаемся найти слово в строке
    input_str it = std::find_if(input_str(ist), input_str(), isInt);
    // если числа в строке нет, возвращаем пустое слово, иначе
    // возвращаем слово, являющееся числом
    return (it == input_str() ? std::string() : *it);
}
 
std::ostream & operator<< (std::ostream &o, const Line &l)
{
    // формируем поток
    o << l.getData() << std::endl;
    // возвращаем ссылку на него
    return o;
}
 
std::istream & operator>> (std::istream &ist, Line &l)
{
    // временная переменная
    std::string str;
    // считываем линию
    std::getline(ist, str);
    // устанавливаем новое значение
    l.setData(str);
    // возвращаем ссылку на поток
    return ist;
}
 
bool isInt(const std::string &s)
{
    return std::all_of(s.begin(), s.end(), isdigit);
}
Объявление и реализацию сами по файлам распихаете.
Если компилятор не поддерживает С++11, то напишите собственную реализацию std::to_string() и std::all_of()
olia90
 Аватар для olia90
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 37
15.10.2013, 18:50  [ТС]     Нужно чтобы программа искала в txt первое слово, и выводила все остальное, что есть в строке #7
Честно говоря я просто даже не знаю как вас благодарить. Это просто нереально. Таки есть хорошие и умные люди на форуме.Как же много вы для меня сделали. Большое большое спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2013, 19:20     Нужно чтобы программа искала в txt первое слово, и выводила все остальное, что есть в строке
Еще ссылки по теме:

Есть строка. Нужно в строке найти слово и его подменить C++
Даны два слова.Верно ли, что первое слово начинается на ту же букву, на которую заканчивается второе слово C++
Удалить первое слово в строке C++

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

Или воспользуйтесь поиском по форуму:
olia90
 Аватар для olia90
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 37
24.10.2013, 19:20  [ТС]     Нужно чтобы программа искала в txt первое слово, и выводила все остальное, что есть в строке #8
Извините пожалуйста, но не могли бы вы подсказать, как модифицировать данную программу для сортировки массива экземпляров класса с использованием перегруженных операций сравнения? Спасибо.
Yandex
Объявления
24.10.2013, 19:20     Нужно чтобы программа искала в txt первое слово, и выводила все остальное, что есть в строке
Ответ Создать тему
Опции темы

Текущее время: 07:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru