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


Автор: Jenn 2.2.2007, 04:21
Дано 10 символьных строк, состоящих из слов, разделенных пробелами. 
Удалить из текста одинаковые слова. smile 


Автор: Friackazoid 2.2.2007, 11:52
А что непонятного считываешь слова в массив потом ищешь в нем одинаковые слова. Еси таких же слов нет то выводишь слово в файл.
Вот примерный код
Код

#define n 200
 FILE *ifp = fopen("input.txt","r");
 char *slova[n]; //сам подумай о количестве слов в файле
 char stroka[n]; 
 int k=0;
 for (int i=0; i<9; i++)
 {
    fgets(stroka,n,ifp);
    slova[k]=strtok(stroka,".,!? ");
    while (slova[k])
    {
       k++;
       slova[k] = strtok(NULL, ".,!? ");
    }
 }
 fclose (ifp);
 FILE ofp = fopen ("output.txt","w");
bool flag;
  for(int i=0; i<k; i++)
  {
    flag = false;
    for(int j=0; j<k; j++)
     if(strcmp(slova[i],slova[k]))
     {
       flag = true;
       break;
     }
    if(!flag)
       fputs(slova[k]);
  }


Пишу экспромтом так что извини если что не так.

Гыг  smile  только сейчас заметила что чертов Експлорер защел под акком моего друга. Предыдущий пост приадлежит мне. Модератор поставьте там пожалуста (с)Friackazoid smile  smile  

Автор: Alexeis 2.2.2007, 12:35

M
Alexeis
Модератор: на форуме запрещено создавать дубликаты тем. вторую тему удаляю.

Автор: Jenn 2.2.2007, 12:35
Может ещё кто-нибудь решить эту задачку? Или исправить ошибки в решении FriackazoidFriackazoid вроде все правильно решил, а выдается куча ошибок. Не пойму в чем дело?


Автор: Jenn 2.2.2007, 13:20
Хотя почему в этой строке
Цитата(Friackazoid @  2.2.2007,  11:52 Найти цитируемый пост)
 fputs(slova[k]);

всего 1 параметр, ведь должно быть 2. Это 1-ая ошибка. Как ее исправить подскажите? А 2-ая ошибка в этой строке FILE ofp = fopen ("output.txt","w"). Почему не пойму. Помогите исправить? smile 
Надеюсь в остальном по смыслу задача правильная. Проверьте кто может и помогите! Пожалуйста!!!


Автор: Dov 3.2.2007, 12:04
1. fputs(slova[k], ofp);
2. FILE ofp -> FILE* ofp

Автор: sergejzr 3.2.2007, 12:26
Этот код и повторения подсчитает smile
(Подправил оригинал http://forum.vingrad.ru/index.php?showtopic=133089&view=findpost&p=1005950. )
Это не совсем вижуал, но мозгами поработать ведь никогда не помешает.
Код

#include <string>
#include <iostream>
#include <fstream>
#include <map>
int main()
{
    std::map<std::string,int> count;
    std::string word;
    
    
    std::ifstream fileIn( "test.txt" );
  
    while ( !fileIn.eof() )
    {
        fileIn>>word;
        count[word] += 1;
    }
    fileIn.close();

    for (std::map<std::string,int>::iterator p = count.begin(); p != count.end(); p++)
        std::cout<<p->first<<'\t'<<p->second<<'\n';
        int i;
            std::cin>>i;
}


Если компилер будет ругаться, пробовать так:
Код

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <map>

using namespace std;

int main()
{
    map<string,int> count;
    string word;
    
    
    ifstream fileIn( "test.txt" );
  
    while ( !fileIn.eof() )
    {
        fileIn>>word;
        count[word] += 1;
    }
    fileIn.close();

    for (map<std::string,int>::iterator p = count.begin(); p != count.end(); p++)
        cout<<p->first<<'\t'<<p->second<<'\n';
        int i;
        cin>>i;
}


В следующий раз пользуйтесь поиском пожалуйста, чтобы не дублировать вопросы smile

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