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

поиск слов, состоящих из прописных букв - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
kazahec
3 / 3 / 0
Регистрация: 05.04.2011
Сообщений: 25
05.04.2011, 22:20     поиск слов, состоящих из прописных букв #1
всем доброго времени суток, собственно сабж, необходимо найти слова, содержащиеся в файле, которые состоят только из прописных букв.
проблема в том что необходимо использовать список, линейный не кольцевой, т.е. есть исходный файл с текстом, далее необходимо этот текст скопировать в другой файл, и вывести список слов, которые соответствуют заданию(состоят только из прописных букв)
вот кое какой код из проги...
в файле вордлист -
там, где начинается fout<<"\n\nResult:\n";while (current) должно быть какое то условие того, что буквы в слове прописные, я думаю понятно что конструкция current->word[0] - первый символ слова, а current->word[current->word.size()-1] - последний.. эмм вопрос в том - использовать ли функцию isupper() или сделать по другому, используя таблицу ascii например оО

исходник *.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "WordList.h"
#include <iostream>
 
using namespace std;
 
int main()
{
    ifstream text("text.txt");          //открытие потока файла для входного файла
    ofstream fout("outfile.txt");       //открытие потока для выходного файла
 
    WordList List;
 
 
    List.word_list(text);
 
    text = *(new ifstream("text.txt"));
    List.result(text, fout);
 
    return 0;
}
заголовочный WordList.h

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
#include "Text_Base.h"
 
class WordList : public Text_Base  
{
private:
    char posl;
public:
    WordList();
    ~WordList();
    void result(ifstream &txt, ofstream &fout);
};
 
WordList::WordList()
{
    first = NULL;
}
 
WordList::~WordList()
{
 
}
 
void WordList::result(ifstream &txt, ofstream &fout)
{
    fout<<"Input file: \n\n";
    
    while(!txt.eof())//Пока не конец файла
    {
        char ch;
        
        txt.read(&ch,1);
        fout<<ch;//посимвольная запись в файл
    }
    
    cout<<Rus("Эхо-печать выполнена!\n");
    cout<<"=================================================|\n";
    int kol=0;              //счетчик найденных слов
    link* current = first;
    
 
    fout<<"\n\nResult:\n";
           
    while (current)
    {
    if ((current->word[0] ==isupper(??))&&(current->word[current->word.size()-1] == isupper(??)))
        {
            fout<<current->word<<"\n";
            kol++;
        }
        current = current->next;
    }
    if(!kol)
        fout<<"Words aren't found!=(\n";
}
заголовочный Text_Base.h
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
#pragma once
#include <string>
#include <fstream>
#include <iostream>
#include <windows.h>
 
using namespace std;
 
char bufRus[256];
char* Rus(const char* txt) 
{
    CharToOem(txt, bufRus);
    return bufRus;
}
//////////////////////////////////////////////////////////////////////////////////////
struct link
{
    string word;
    link* next;
};
 
 
class Text_Base  
{
protected:
    link* first;
    char posl;
public:
    Text_Base();
    void word_list(ifstream &text); //выделение слов и заполнение списка.
    void Echo(ifstream &txt, ofstream &of);     //Эхо-печать исходного текста.
    virtual ~Text_Base() = 0;
 
};
///////////////////////////////////////////////////////////////////////////////////////
Text_Base::Text_Base()
{
    first = NULL;
}
 
Text_Base::~Text_Base()
{
}
 
void Text_Base::word_list(ifstream &text)
{
    string tmp_word = "";
    char ch;
    do
    {
        
        text.read(&ch,1);
    
        if ((ch != '.') && (ch != ',') && (ch != '!') && (ch != '-')&& (ch != '?') && (ch != ' ') && (ch != '\n'))
        {
            tmp_word += ch;
            posl=ch;
        }
        else
        {
            link* tmp_link = new link;  //заполнение
            tmp_link->word=tmp_word;    //списка
            tmp_link->next=first;       
            first = tmp_link;           
            posl = tmp_word[tmp_word.size()-1];
    //      cout<<tmp_word;
            tmp_word = "";
        }
 
    }
    while (!text.eof());
    cout<<Rus("Слова определены!\n");
    cout<<"=================================================|\n";
            
}
 
void Text_Base::Echo(ifstream &txt, ofstream &of)
{
    of<<"Input file: \n\n";
    while(!txt.eof())//Пока не конец файла
    {
        char ch;
        
        txt.read(&ch,1);
        of<<ch;//посимвольная запись в файл
    }
    cout<<Rus("Эхо-печать выполнена!\n");
 
    cout<<"=================================================|\n";
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2011, 22:20     поиск слов, состоящих из прописных букв
Посмотрите здесь:

Сколько слов, состоящих из неболее 4 букв C++
C++ Сколько в файле слов, состоящих не более чем из четырех букв
Сколько в файле слов, состоящих из не более чем четырех букв C++
C++ Сколько слов, состоящих только из прописных букв, содержится в сообщении
Подсчитать сколько слов, состоящих только из прописных букв, содержится в сообщении, и в каждом таком слове изменить все буквы на заглавные. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Subgrando
40 / 40 / 3
Регистрация: 28.01.2011
Сообщений: 175
05.04.2011, 23:01     поиск слов, состоящих из прописных букв #2
C++
1
2
3
4
5
6
7
bool is_upper_word(char* word) {
    int len = strlen(word);
    for(int i = 0; i < len; i++) {
        if(!isupper((int)word[i])) return false;
    }
    return true;
}
kazahec
3 / 3 / 0
Регистрация: 05.04.2011
Сообщений: 25
06.04.2011, 15:26  [ТС]     поиск слов, состоящих из прописных букв #3
спасип, щас попробую ввернуть)

Добавлено через 1 час 1 минуту
есть еще идеи, где лучше организовать поиск и заполнение списка7)

Добавлено через 15 часов 19 минут
все еще актуально)
kazahec
3 / 3 / 0
Регистрация: 05.04.2011
Сообщений: 25
07.04.2011, 16:02  [ТС]     поиск слов, состоящих из прописных букв #4
может будет кому интересно..

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

после цикла while(current) в вордлисте было добавлено следующее...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
while(current)
{
bool isbig=true;
for (int i=0; i<current->word.size(); i++)
                
            if(!( ( int(current->word[i])>=(-64) )&& (int(current->word[i])<=(-33)) ) )
                                
                isbig=false;
 
            if (isbig)
 
            {
                fout<<current->word<<"\n";
                kol++;
            }
 
            else isbig=true;
}
как то так=)
Yandex
Объявления
07.04.2011, 16:02     поиск слов, состоящих из прописных букв
Ответ Создать тему
Опции темы

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