Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Считывание текста из файла


Автор: eldarovich 1.6.2006, 20:18
Задание: написать программу на языке С++
С помощью текстового редактора создать файл, длина которого не превышает 700 символов(длина строки текста не должна превышать 70 символов). Имя файла должно иметь расширение .dat
Написать программу, которая:
-выводит исходный текст на экран дисплея
-по нажатию произвольной клавиши поочередно выделяет в тексте заданное слово(которое вводится с клавиатуры)
-выводит текст на экран дисплея еще раз, заключая заданное слово в кавычки и поочередно выделяет заданное слово вместе с кавычками

Ребят, помогите пожалуйста, это 1 из 3-х задач нашей курсовой, я сейчас мучаюсь с остальными двумя про списки и динамические структуры...
Заранее Спасибо! 

Автор: mr.Anderson 1.6.2006, 20:29
Послушай, друг... Ты хочешь, чтобы за тебя написали в общем-то не очень маленькую Windows-программу! Ну, консольную, конечно, для тебя, мож, и напишут, но вот Windows никто писать не возьмется. 

Автор: Xenon 1.6.2006, 20:39
И вообще такие дела в центр помощи надо. Здесь разбирают уже более-менее написанный код, а ты просишь все за тебя сделать. 

Автор: Rockie 1.6.2006, 20:59
Цитата(XenonSk @  1.6.2006,  20:39 Найти цитируемый пост)
И вообще такие дела в центр помощи надо. Здесь разбирают уже более-менее написанный код

что-то мне подсказывает, что в центре помощи такую тему тоже быстро закроют =)

Цитата(eldarovich @  1.6.2006,  20:18 Найти цитируемый пост)
я сейчас мучаюсь с остальными двумя про списки и динамические структуры...

вот и выкладывай что у тебя вымучивается.
 

Автор: eldarovich 2.6.2006, 05:36
Да нет, прога консольная! Хорошо, тогда помогите конкретно с пунктом -  по нажатию произвольной клавиши поочередно выделяет в тексте заданное слово(которое вводится с клавиатуры)...  

Автор: MAKCim 2.6.2006, 13:48
Цитата

Да нет, прога консольная! Хорошо, тогда помогите конкретно с пунктом -  по нажатию произвольной клавиши поочередно выделяет в тексте заданное слово(которое вводится с клавиатуры)...  

Код

string text;   // тут текст
...
string str;    // тут слово
getline(cin,str);
string::size_type index=0;
while (1) // бесконечный цикл
{
    string::size_type position=text.find(str,index);
    if (position<text.length()) // нашли очередное вхождение слова в строку
    {
        index=position+str.length()-1;
        // каким то образом выделяем в тексте группу символов от position до position+str.length()-1;
    }
    else index=0;
}
  

Автор: eldarovich 2.6.2006, 14:00
спасибо, вечером попробую  

Автор: eldarovich 2.6.2006, 14:39
эээ, я программирую на Турбо С++, там нету никаких string... это код не на Visual С++ случайно? 

Автор: Xenon 2.6.2006, 15:08
#include <string>? Там нет? 

Автор: eldarovich 2.6.2006, 15:20
XenonSk, 
#include <string> не работает, а #include <string.h> работает но не помогает, ну нету такого типа string! ну да ладно, не в этом суть, текст и слово допустим типа char, далее считываем слово, далее фрагмент 
Код

string::size_type index=0;    
while (1) // бесконечный цикл    
{    
    string::size_type position=text.find(str,index);


мне не понятен smile  

Автор: eldarovich 2.6.2006, 16:27
Вот, реализовал поиск слова в тексте... теперь как я понимаю, надо найти позицию первого и выделить текст до позиции последнего символа... как это реализовать? 

Автор: mr.Anderson 3.6.2006, 19:54
может, я ошибаюсь, но, по-моему, в консоли не поддерживается выделение слова... 

Автор: Oleg_Ci 3.6.2006, 20:01
  Я программу так понял, следующие действия:
1. Открываем файл и выводим его содержимое на консоль.
2. Просим ввести слово,  потом его вводим, нажимаем на ввод ( ENTER )
3. Ищем в исходном тексте введённое слово
4. И выводим исходный текст снова на консоль, и что-бы введённое с консоли слово оказалось в ковычках.
Цитата
-по нажатию произвольной клавиши поочередно выделяет в тексте заданное слово
 Только что понимать под "поочерёдно выделяет" и под "произвольной клавишей" ???  Помойму под "поочерёдно выделяет" надо понимать - попросить ввести слово потом вывести исходный текст, потом снова просить ввести и опять выводить и т.д. 

Автор: eldarovich 3.6.2006, 20:07
Олег4, 
да, ты правильно понял, вводим слово слово, затем выделяем его в тексте, я пока реальзовал только вывод теста и поиск слова.. вот код
Код

#include <stdio.h>
#include <fstream.h>
#include <string.h>
#include <conio.h>
#include <iostream.h>

int main(){
clrscr();

char text[699];
char slovo[10];

FILE *fin=fopen("text.dat", "r");
 if (!fin) {
  cout << "Error open file! " <<endl;
  return 1;
 }

fread(&text,sizeof(char),sizeof(text),fin);

cout << text << endl;

cout << "Vvedite slovo dla poiska: "; cin >> slovo;

while (1) {
 if(strstr(text, slovo)) {
  cout << "Prisutstvue! " << endl;
  return 0;
 }
else  cout << "Otsutstvuet! "<<endl;   break;
}
return 0;
}
 

Автор: Oleg_Ci 4.6.2006, 11:24
Код

#include <stdio.h>    
#include <fstream.h>
#include <string.h>    
#include <conio.h>    
#include <iostream.h>

void SaveText()
{
    FILE *f = fopen("text.dat","w");
    fprintf( f, "int main () { clrscr () ; SaveText () ;\n" );
    fprintf( f, "char text [100][20] ; char slovo [20] ; ifstream\n" );
    fprintf( f, "if ( ! fin ) { cout <<  Error open file !  << endl ;\n" );
    fprintf( f, "return 1 ; } int kolvo = out ( fin , text ) ;\n" );
    fprintf( f, "for ( int i = 0 ; i < kolvo ; i ++ ) { cout << text [i] ;}\n" );
    fprintf( f, "cout << Vvedite slovo dla poiska ( 'end' -exit)  > ; cin\n" );
    fprintf( f, "if ( ! strcmp ( slovo , endl ) ) return 0 ;\n" );
    fprintf( f, "char name [] =  ERROR Otsutstvuet !  \n" );
    fprintf( f, "for ( int i = 0; i < kolvo ; i ++ )\n" );
    fprintf( f, "int c = strcmp ( text [i], slovo ) ; if ( !c )\n" );
    fclose( f );
};
int out(ifstream &f, char text[][20])
{
    int i = 0;
    char c[20];
    while( f>>c )
        {
        memcpy(text[i],c,20);
        i++;
        }
    return i;
};
void cop( char *c )
{
    char ch[20];
    ch[0] = 34;
    ch[1]='\0';
    strcat(ch,c);
    strcat(ch,"\"");
    strcpy(c, ch);
};
int main()
{
    clrscr();
    SaveText();
    char text[200][20];
    char slovo[20];
    ifstream fin("text.dat");
    if (!fin)
    {
        cout << "Error open file! " <<endl;
        return 1;
    }
    int kolvo = out( fin, text );
    fin.close();
    while (1)
    {
        clrscr();
        for ( int i=0; i<kolvo; i++ )
             cout << text[i]<<" ";
        cout <<endl<<endl<< "Vvedite slovo dla poiska ('end'-exit) > ";
        cin >> slovo;
        if ( !strcmp(slovo,"end") ) break;
        char name[] = "ERROR Otsutstvuet!  " ;
        for ( i=0; i<kolvo; i++ )
        {
            int c = strcmp(text[i], slovo) ;
            if ( !c )
            {
               strcpy(name, "OK. Prisutstvue! ");
               cop(text[i]);
            }
        }
        cout<<name;
        cout<<endl;
    }
    return 0;
}

Чтобы и цыкла выйти "end" введи. 

Автор: eldarovich 4.6.2006, 11:50
Олег4, 
спасибо тебе, с меня пиво! осталось маленько подправить(чтобы слова выделялись цветом) и конфетка будет smile 
уже почти 2,5 задачи из 3 готовы к курсачу, жить можно smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)