Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 6311
Последний выпуск: 19.06.2015

помогите с кодом в С++

82K
17 декабря 2012 года
__VT_
12 / / 03.10.2012
помогите пожалйста с кодом программы!! нужно что бы программа находила из заданного текста сколько раз встречаеться самое длинное слово!

Код:
case 3:
            for (d=0;d<m;d++)
            {
                for (e=1;e<m;e++)
                {
                    if (strlen(mas[e])>strlen(mas[e-1]))
                    {
                        swap(mas[e],mas[e-1]);
                    }
                }
            }
           
           
            cout<<"Самое длинное слово:"<<mas[0]<<endl;
                buff1=new char(sizeof(mas[0]));
                buff1=mas[0];

            break;
        case 4:
            k=0,n=0;
       
       
                    for(int y=0; y<sizeof(mas[0]);y++)
                    {
                        if (mas[y]==buff1)
                        {
                            k++;
                        }
                    }
           
           
       
            cout<<"встречается в тексте:"<<k<<endl;
            break;


в кайсе 3 он находит самое длинное слово, в 4 он должен находить сколько раз оно встречаеться, но он находит только его самого и выводит цыфру 1!
помогите пожалйста срочно надо!!!!
11K
17 декабря 2012 года
xAtom
65 / / 17.01.2011
Код:
#include <iostream>
#include <string.h>
#define is_alpha(c) \
((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || \
 (c >= 'а' && c <= 'я') || (c >= 'А' && c <= 'Я'))

typedef const char cchar;
cchar* maxlen(cchar* s, cchar** e);
int repeat_w(cchar* s, cchar* f, cchar* l);


int main(void)
{
   cchar *s = "Abacan, tula, abacan kansk abacan, abacan";

   cchar* p, *e;

   p = maxlen(s, &e);
   std::cout.write(p, (e - p));
   std::cout << " = " << repeat_w(s, p, e);

   std::cin.get();
   return 0;
}


// функция возвращает максимальное слово
cchar* maxlen(cchar* s, cchar** e) {
   int n = 0;
   cchar* p, *p1, *p2;

   while(*s) {
       for(p = s; *p && is_alpha(*p); *p++);
       if((p - s) > 0) {
           if((p - s) > n) {
              n  = p - s;
              p1 = s;
              p2 = p;
           }
           s = p;
       } else
           *s++;
   }
   *e = p2;
   return p1;
}



// функция подсчитывает слово сколько раз оно встречается
int repeat_w(cchar* s, cchar* f, cchar* l) {
   int n = 0;
   for(;*s; ++s) {
       if(is_alpha(*s)) {
          if(! strncmp(s, f, l - f)) {
              if(! is_alpha(*(s + (l-f)))) {
                  ++n;
                  s += (l - f) - 1;
              }
          }
       }
   }
   return n;
}
459
17 декабря 2012 года
cronya
420 / / 03.01.2009
а если их несколько? :)
82K
17 декабря 2012 года
__VT_
12 / / 03.10.2012
слова беруться из файла:( мне на основании моего кода бы :(( я не могу понять ваш :(
459
18 декабря 2012 года
cronya
420 / / 03.01.2009
а чего там понимать, сделано на указателях самый примитивный и бестолковый метод.

Вот тут у вас как то страно
 
Код:
buff1=new char(sizeof(mas[0]));
buff1=mas[0];
зачем выделять память, если потом переприсваиваете указатели?
459
18 декабря 2012 года
cronya
420 / / 03.01.2009
я бы так сделал
Код:
#include <iostream>
#include <fstream>
#include <locale>
using namespace std;

struct List
{
    char word[30];
    int count;
    List* next;
}*head;

void FindLongWord(fstream& File);
char* ToLower(char* aWord);
bool GetWordIsExist(char *aWord);
void AddToList(char* aWord);
void Out();
void FreeMemmory();

int main()
{
    setlocale(LC_ALL,"Russian");
    fstream File("myText.txt");
    if(!File.is_open())
    {
        cout<<"Не могу открыть файл"<<endl;
        system("pause");
        return -1;
    }  
    head = NULL;   
    FindLongWord(File);
    Out();
    FreeMemmory();
    File.close();
    cout<< endl;   
    system("pause");
    return 0;
}

void FindLongWord(fstream& File)
{
    List* ptr = NULL;
    char aWord[30];
    size_t LongLen = 0;
    while(!File.eof())
    {
        File >> aWord;     
        strcpy_s(aWord,ToLower(aWord));
        cout << aWord << endl;
        if(LongLen <= strlen(aWord))
        {
            if(LongLen < strlen(aWord))
            {  
                LongLen = strlen(aWord);
                if(head == NULL)
                {                  
                    AddToList(aWord);
                }
                else
                {                                      
                    FreeMemmory();
                    AddToList(aWord);                  
                }
            }
            else
            {  
                bool flag = GetWordIsExist(aWord);
                if(flag == false)
                {
                    AddToList(aWord);
                }
            }
        }              
    }      
}

bool GetWordIsExist(char* aWord)
{  
    List* ptr = head;
    bool flag = false;
    while(ptr!=NULL)
    {
        if(strcmp(ptr->word, aWord) == 0)
        {
            flag = true;
            ptr->count+=1;
            break;
        }
        ptr = ptr->next;
    }
    return flag;
}

void Out()
{
    List* ptr = head;
    int count = 0;
    while(ptr != NULL)
    {
        count++;
        cout << "#" << count << ":" << endl;
        cout << "Длинное слово: " << ptr->word << endl;
        cout <<"Кол-во раз встречается: " << ptr->count << endl;
        ptr = ptr->next;
    }
}

void FreeMemmory()
{
    List *ptr = head, *tmp = NULL;
    while(ptr->next != NULL)
    {
        tmp = ptr->next;
        delete[] ptr;
        ptr = tmp;
    }
    delete[] ptr;
    head = NULL;
}

void AddToList(char* aWord)
{
    List* ptr = NULL;
    if(head == NULL)
    {
        List* ptr = new List;
        strcpy_s(ptr->word, aWord);
        ptr->count = 1;
        ptr->next = NULL;
        head = ptr;
    }
    else
    {
        ptr = new List;
        strcpy_s(ptr->word, aWord);
        ptr->count=1;
        ptr->next = head;
        head = ptr;
    }
}

char* ToLower(char* aWord)
{
    int len = strlen(aWord);
    locale loc("");
    for(int idx=0; idx<len; idx++)
    {
        aWord[idx] = tolower(aWord[idx],loc);
    }
    return aWord;
}
в файле
 
Код:
Фстречаеться встречаеться самое длинное слово! Встречаеться фстречаеться
Результат
Код:
фстречаеться
встречаеться
самое
длинное
слово!
встречаеться
фстречаеться
#1:
Длинное слово: встречаеться
Кол-во раз встречается: 2
#2:
Длинное слово: фстречаеться
Кол-во раз встречается: 2

Для продолжения нажмите любую клавишу . . .

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог