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

Ваш аккаунт

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

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

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

Задача на строки

77K
13 марта 2012 года
1n1ke1
19 / / 03.03.2012
Помогите решить бьюсь над ней уже очень много времени

Дан текст, состоящий из 2 строк с максимальной длиной 80 символов. Необходимо вывести в обратном алфавитном порядке те слова, которые не присутствуют в обеих строках одновре-менно. Считать, что текст написан синтаксически грамотно, в качестве знаков препинания ис-пользуются точка и запятая, слова состоят только из букв, перенос слов по слогам отсутствует. Для выделения слов из строки создать пользовательскую функцию.

Решение на С++ через string.h c использованием функции помогите пожалуйста...
79K
13 марта 2012 года
FIRON
17 / / 13.03.2012
в качестве одного из вариантов решения:
Код:
//---------------------------------------------------------------------------

#pragma hdrstop
#include <string>
#include <fstream>
#include <iostream>
#include <tchar.h>
//---------------------------------------------------------------------------
#pragma argsused
using namespace std;

bool compare(string str1, string str2)
{
    bool b = 1;
    unsigned int ii = 0;
    while((str1[ii] != '\0') && (str2[ii] != '\0'))
    {
        if(str1[ii] != str2[ii])
            b = 0;
        ii++;
    }
    return b;
}


unsigned int wcount(string str)
{
    unsigned int count = 0;
    for(unsigned int ii = 0;ii < str.length();ii++)
        if((str[ii] == ' ') || (str[ii] == ',') || (str[ii] == '.') || (str[ii] == '\n'))
            count++;
    return count;
}

char ** divide(string str)
{
    char ** tmp = new char * [wcount(str)];
    unsigned int j = 0, k = 0;
    tmp[0] = new char [25];
    for(unsigned int ii = 0;ii <= str.length();ii++)
        if((str[ii] != ' ') && (str[ii] != ',') && (str[ii] != '.') && (str[ii] != '\n'))
        {
            tmp[j][k] = str[ii];
            k++;
        }
        else
        {
            tmp[j][k] = '\0';
            j++;
            k = 0;
            tmp[j] = new char [25];
        }
    return tmp;
}

char ** chck(string str1, string str2)
{
    char ** cstr1, ** cstr2;
    cstr1 = divide(str1);
    cstr2 = divide(str2);
    char ** tmp = new char * [20];
    unsigned int count = 0;
    for(unsigned int ii = 0;ii <= wcount(str1);ii++)
    {
        bool b = 1;
        for(unsigned int j = 0;j <= wcount(str2);j++)
            if(compare(cstr1[ii],cstr2[j]))
                b = 0;
        if(b)
        {
            tmp[count] = new char [25];
            tmp[count] = cstr1[ii];
            count++;
        }
    }
    //////////////////////////////////
    for(unsigned int ii = 0;ii <= wcount(str2);ii++)
    {
        bool b = 1;
        for(unsigned int j = 0;j <= wcount(str1);j++)
            if(compare(cstr2[ii],cstr1[j]))
                b = 0;
        if(b)
        {
            tmp[count] = new char [25];
            tmp[count] = cstr2[ii];
            count++;
        }
    }
    tmp[count] = new char [1];
    tmp[count] = '\0';
    return tmp;
}

int _tmain(int argc, _TCHAR* argv[])
{
    ifstream in("in.txt",ios::in);
    string str1, str2;
    char * tmp = new char [80];
    in.getline(tmp,80,'\n');
    str1.append(tmp);
    in.getline(tmp,80,'\n');
    str2.append(tmp);
    delete [] tmp;
    char ** arw;
    arw = chck(str1,str2);
    unsigned int ii = 0;
    while(arw[ii]!='\0')
    {
        cout << arw[ii] << endl;
        ii++;
    }
    char c;
    cin >> c;
    return 0;
}
//---------------------------------------------------------------------------
77K
13 марта 2012 года
1n1ke1
19 / / 03.03.2012
Спасибо большое вот только она мне ошибку выдает а именно на строке
if ((str == ' ') || (str == ',') || (str == '.') || (str == '\n'))
7
13 марта 2012 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: 1n1ke1
она мне ошибку выдает а именно на строке
if ((str == ' ') || (str == ',') || (str == '.') || (str == '\n'))

Предполагаю,всё дело в форумной разметке,которая пока ещё глючная.На деле там должно быть что-то вроде

 
Код:
if ((str[i] == ' ') || …
79K
13 марта 2012 года
FIRON
17 / / 13.03.2012
Компилятор должен прилично ругаться, учитывая то, что удалились все "" )
Скорее всего все ошибки будут связаны именно с этим.(Перед отправкой проверял на С++ Builder, все вроде как работало)
77K
14 марта 2012 года
1n1ke1
19 / / 03.03.2012
Программа как сказал препод не показывает уникальные слова второй строки и нету перемены букв сортировки которая выдавала бы слова с конца
79K
15 марта 2012 года
FIRON
17 / / 13.03.2012
Если правильно понял,то как то так.
Код:
//---------------------------------------------------------------------------

#pragma hdrstop
#include <string>
#include <fstream>
#include <iostream>
#include <tchar.h>
//---------------------------------------------------------------------------
#pragma argsused
using namespace std;

bool compare(char * str1, char * str2)
{
    bool b = 1;
    unsigned int ii = 0;
    while((str1[ii] != '\0') && (str2[ii] != '\0') && (b))
    {
        if(str1[ii] != str2[ii])
            b = 0;
        ii++;
    }
    return b;
}


unsigned int wcount(char * str)
{
    unsigned int count = 0;
    bool b = 0;
    for(unsigned int ii = 0;ii < strlen(str);ii++)
        if((str[ii] == ' ') || (str[ii] == ',') || (str[ii] == '.') || (str[ii] == '\0'))
            b = 1;
        else
            if(b)
            {
                count++;
                b = 0;
            }
    count++;
//  cout << count << endl;
    return count;
}

bool bigger(char * str1, char * str2)
{
    unsigned int t = 0;
    unsigned int l;
    if(strlen(str1) > strlen(str2))
        l = strlen(str2);
    else
        l = strlen(str1);
    for(unsigned int ii = 0;ii < l;ii++)
    {
        if((str1[ii] > str2[ii] && (t == 0)))
            t = 1;
        if((str1[ii] < str2[ii] && (t == 0)))
            t = 2;
    }
    return (t == 2);
}

char ** sort(char ** source)
{
    char ** tmp;
    tmp = source;
    unsigned int size = 0;
    while(tmp[size] != '\0')
        size++;
    for(unsigned int ii = 0;ii < (size-1);ii++)
        for(unsigned int j = ii+1;j < size;j++)
            if(bigger(tmp[ii],tmp[j]))
            {
                char * str;
                str = tmp[ii];
                tmp[ii] = tmp[j];
                tmp[j] = str;
            }
    return tmp;
}

char ** divide(char * str)
{
    char ** ctmp = new char * [40];
//  delete [] ctmp;
//  ctmp = new char * [40];
    unsigned int j = 0, k = 0;
    ctmp[0] = new char [25];
    bool b = 0;
    for(unsigned int ii = 0;ii <= strlen(str);ii++)
        if((str[ii] != ' ') && (str[ii] != ',') && (str[ii] != '.') && (str[ii] != '\0'))
        {
            if(b)
            {
                ctmp[j][k] = '\0';
//              cout << tmp[j] << endl;
                j++;
                k = 0;
                ctmp[j] = new char [25];
                b = 0;
            }
            ctmp[j][k] = str[ii];
            k++;
        }
        else
            b = 1;
    ctmp[j][k] = '\0';
//  cout << tmp[j] << endl;
    return ctmp;
}

char ** chck(char * str1, char * str2)
{
    char ** cstr1;
    char ** cstr2;
    cstr1 = divide(str1);
    cstr2 = divide(str2);
    char ** tmp = new char * [20];
    unsigned int count = 0;
    for(unsigned int ii = 0;ii < wcount(str1);ii++)
    {
        bool b;
        b = 1;
        unsigned int j = 0;
        while((j < wcount(str2)) && (b))
        {
            if(compare(cstr1[ii],cstr2[j]))
                b = 0;
            j++;
        }
        if(b)
        {
            tmp[count] = new char [25];
            tmp[count] = cstr1[ii];//strcpy(cstr1,tmp[count]);
            count++;
        }
    }
    //////////////////////////////////
    for(unsigned int ii = 0;ii < wcount(str2);ii++)
    {
        bool b;
        b = 1;
        for(unsigned int j = 0;j < wcount(str1);j++)
            if(compare(cstr2[ii],cstr1[j]))
                b = 0;
        if(b)
        {
            tmp[count] = new char [25];
            tmp[count] = cstr2[ii];
            count++;
        }
    }
    tmp[count] = new char [1];
    tmp[count] = '\0';
    return tmp;
}

int _tmain(int argc, _TCHAR* argv[])
{
    ifstream in("in.txt",ios::in);
//  string str1, str2;
    char * str1 = new char [80];
    char * str2 = new char [80];
    in.getline(str1,80,'\n');
//  str1.append(tmp);
    in.getline(str2,80,'\n');
//  str2.append(tmp);
//  delete [] tmp;
    char ** arw;
    arw = chck(str1,str2);
    arw = sort(arw);
    unsigned int ii = 0;
    while(arw[ii]!='\0')
    {
        cout << arw[ii] << endl;
        ii++;
    }
    char c;
    cin >> c;
    return 0;
}
//---------------------------------------------------------------------------
77K
15 марта 2012 года
1n1ke1
19 / / 03.03.2012
Спасибо вам огромное, только единственная проблема программа выдает уникальные слова лишь одной строки а второй не показывает
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог