Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Посчитать количество 
:(
    Опции темы
aToM1
Дата 21.1.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 19.1.2007

Репутация: нет
Всего: нет



Писал прогу, читающую текстовый файл с подсчетом количества встреченных слов:
Использовал STL(map): че здесь не правильно?
Код

#include <String.h>
           #include <iostream.h>
           #include "Map.h"
           int main()
           {
             Map<String,int> count;
             String word;
             while (cin >> word) count[word]++;
             for (Mapiter<String,int> p = count.first(); p; p++)
                 cout << p.value() << '\t' << p.key() << '\n';
             return 0;
           }


Второй вопрос: Как сделать так, чтобы прога выводила на экран список слов именно после! выполнения программы?
Т.е. мне нужна прога, считывающая файл(текстовый), далее подсчет слов (map), далее вывод результата на экран...
Прога, счит файл:
Код

FILE*f
f=fopen("Документ с текстом.doc","r");

Или как-то так?
Тупик в выводом на экран... Просто printf, что-ли?

Код

#include <string>
#include <iostream>
ifstream ifs;
ifs.open("1.doc.txt");

string str;
while (! ifs.eof())
{
    ifs >> str;
    cout << str << endl;
}

не пашет..Почему? Нашел компилятор ошибку 1...
PM MAIL   Вверх
zkv
Дата 21.1.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Код

#include <string>
#include <iostream>
#include <fstream>
#include <map>

int main()
{
    std::map<std::string,int> count;
    std::string word;
    //в input.txt слова через пробел
    std::ifstream fileIn( "input.txt" );
    int i = 0;
    while ( !fileIn.eof() )
    {
        fileIn>>word;
        count[word] = i++;
    }
    fileIn.close();
    //напряжненно работаем с результатом
    //..
    //поработали - выводим
    for (std::map<std::string,int>::iterator p = count.begin(); p != count.end(); p++)
        std::cout<<p->first<<'\t'<<p->second<<'\n';
}

PM MAIL   Вверх
aToM1
Дата 21.1.2007, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 19.1.2007

Репутация: нет
Всего: нет



Цитата(zkv @ 21.1.2007,  10:02)
Код

#include <string>
#include <iostream>
#include <fstream>
#include <map>

int main()
{
    std::map<std::string,int> count;
    std::string word;
    //в input.txt слова через пробел
    std::ifstream fileIn( "input.txt" );
    int i = 0;
    while ( !fileIn.eof() )
    {
        fileIn>>word;
        count[word] = i++;
    }
    fileIn.close();
    //напряжненно работаем с результатом
    //..
    //поработали - выводим
    for (std::map<std::string,int>::iterator p = count.begin(); p != count.end(); p++)
        std::cout<<p->first<<'\t'<<p->second<<'\n';
}

Че-то не пашет... У меня выводит: "no matching symbolic information found."...
Предложения?
Текстовый документ в той же папке...
PM MAIL   Вверх
KpoHyc
Дата 21.1.2007, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 23.12.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 5



aToM1, а зачем на STL ?  можно и из консоли - или это принципиально?

Добавлено @ 16:17 
Код

#include <string.h>
#include <stdio.h>

char string1[] =
    "A string\tof ,,tokens\nand some  more tokens";
char string2[] =
    "Another string\n\tparsed at the same time.";
char seps[]   = " ,\t\n";
char *token1,
     *token2,
     *next_token1,
     *next_token2;

int main( void )
{
    printf( "Tokens:\n" );

    // Establish string and get the first token: 
    token1 = strtok_s( string1, seps, &next_token1);
    token2 = strtok_s ( string2, seps, &next_token2);

    // While there are tokens in "string1" or "string2"
    while ((token1 != NULL) || (token2 != NULL))
    {
        // Get next token:
        if (token1 != NULL)
        {
            printf( " %s\n", token1 );
            token1 = strtok_s( NULL, seps, &next_token1);
        }
        if (token2 != NULL)
        {
            printf("        %s\n", token2 );
            token2 = strtok_s (NULL, seps, &next_token2); 
        }
    }
}


это пример из MSDN в пять минут исправляется под твои нужды...
--------------------
AScript + Pascal + C -> C++ ->C#Adobe Photoshop 7.0/CS 2.0 + GIMP+ Visual Studio .NET(sp1)/2005 pro(sp1)
PM MAIL ICQ Skype GTalk Jabber   Вверх
zkv
Дата 21.1.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(aToM1 @  21.1.2007,  16:12 Найти цитируемый пост)
Че-то не пашет... У меня выводит: "no matching symbolic information found."...

кто выводит smile, и где? Проек компилируется? Компилятор какой? я же не телепат smile 
может задержку перед завершением работы надо поставить типа std::cin.get()
и вообще я пример этот привел как пример работы с std::map
PM MAIL   Вверх
Dov
Дата 21.1.2007, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Цитата(aToM1 @  21.1.2007,  08:35 Найти цитируемый пост)
Тупик в выводом на экран... Просто printf, что-ли?

А почему бы и нет? Ну, так, например. 
Код
#include<stdio.h>

int main()
{
    FILE* fileIn;
    char  word[80];
    int   count = 0;
    
    fileIn = fopen("input.txt", "r");

    while(fscanf(fileIn, "%s", word) != EOF)
        count++;
    printf("count = %d\n\n", count);

    fseek( fileIn, 0L, SEEK_SET );
    while(fscanf(fileIn, "%s", word) != EOF)
        printf("%s\n", word);    

    return 0;
}




--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
GIK
Дата 21.1.2007, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 1
Всего: 14



Помойму, как то совсем не логично подщитывать повторы в mapе.
Вот написал кое что, но работает не корректно, т.к.  if(st[j]==mapIn[i].c_str())   помойму не сравнивает строки??? Ну и для подсчета, можно былобы использовать динамический массив, так что и некрасиво еще.......  smile 
Но щитает   smile 
Код

#include<string>
#include<map>
#include<iostream>
#include<stdio>
#include <conio>


 using namespace std;

int main(int argc, char* argv[])
{
  string st[12];
  string ranStr;
  int sousou[]={0,0,0,0,0,0,0,0,0,0,0,0}; 
              
  map<int,string> mapIn;
  map<int,string>::iterator mIt;
  mIt=mapIn.begin();
  int i=0;
  bool bul = false; // 
  while(cin>>ranStr && i!=12){
    mapIn.insert(pair<int, string>(i, ranStr));

    for(int j=0; j<12; j++){ 
      mIt=mapIn.find(i);
      if(st[j]==mapIn[i].c_str()) //mIt->second)
        {break; bul=true;} //
      else{continue;} 
    }
    if(!bul){st[i]=ranStr;}
     mapIn[i]=ranStr;

    i++;
    mIt++;
    bul=false;
  }

  for(int i=0; i<12; i++){
   cout<< st[i] <<endl;
  }

  for(int p=0; p<12; p++)
   for(int j=0; j<12; j++){
   if(mapIn[j]==st[p]) 
    {
      sousou[p]++; 
    }
   }
  for(int p=0; p<12; p++){
   cout<<"ellement";
   cout<<st[p];
   cout<<"imeet";
   cout<<sousou[p];
   cout<<"povtorov"<<endl;

  }

    getch();
        return 0;
}



--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
aToM1
Дата 22.1.2007, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 19.1.2007

Репутация: нет
Всего: нет



Цитата(KpoHyc @ 21.1.2007,  16:15)
aToM1, а зачем на STL ?  можно и из консоли - или это принципиально?


Очень желательно... на тему: "списки в STL (map)"

Добавлено @ 00:43 
У Debuga один ответ - "Expresion stream!=NULL"
компилятор кричит:no matching symbolic information found.
11.exe' has exited with code 3 (0x3).
PM MAIL   Вверх
sergejzr
Дата 3.2.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Цитата(GIK @  21.1.2007,  21:52 Найти цитируемый пост)
Помойму, как то совсем не логично подщитывать повторы в mapе.

Это не только очень логично, но и является оптимальным решением данной проблемы.

ПС: Код подправил. Лежит здесь.

Добавлено @ 12:32 
Да и: Модератор: Название темы должно отражать ее суть!


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
ip127001
Дата 3.2.2007, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 24.11.2006
Где: Omsk

Репутация: -2
Всего: -1



Вот что я накинул...
Код

//---------------------------------------------------------------------------
#include<iostream.h>
#include<map>
#include<conio>
#include<fstream>
#pragma hdrstop

//---------------------------------------------------------------------------
typedef map<string,short> Tcount;
#pragma argsused
int main(int argc, char* argv[])
{
     ifstream openFile("1.txt");
        if (!openFile)
        {
           cerr<<"Error open file!!!";
           return -1;
        }
     Tcount *words_=new Tcount;
     short i_=0;
     string word;
        while (!openFile.eof())
        {
           openFile>>word;
           words_->insert(Tcount::value_type(word,i_++));
        }
       openFile.close();
       cout<<words_->size();
       delete words_;
        getch();
        return 0;
}

--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0870 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.