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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Массивы строк 
V
    Опции темы
Metalex
Дата 26.11.2009, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цель задачи такова: ввести строки, затем взять первую строку и перебрать все остальные. Если ни одна из них не равна первой, то первую записать в другой массив строк. Затем взять вторую и провести с ней аналогичные манипуляции. Ну и в довершение вывести оба массива строк.
Вот мое решение, я очень вас прошу, просто найдите ошибку или скажите, что я делаю не так, не указывайте мне на кривизну кода и т.д. и т.п. Создаю тему в центре помощи, т.к. ответ нужен срочно.
Код:
Код
#include<iostream.h>
#include<stdio.h>
#include<string.h>

int main()
{
    int n, m, i, j, p=0, flag=1;
//ввод строк
    cout<<"Vvedite tseloe m - dliny odnoi stroki\n";
    cin>>m;

    cout<<"Vvedite tseloe n - kolichestvo strok\n";
    cin>>n;

    char word[n][m+1];
    char rezult[n][m+1];
        
    cout<<"Vvedite matritsy:\n";
    for (i=0; i<n; i++)
    for (j=0; j<m; j++)
        cin>>word[i][j];
//закончили ввод
//обработка строк, выбор нужных и запись их в рез. массив строк    
    int z=1;
    for (p=0; p<n; p++)
    {
    for (i=p+1; i<n; i++)
    {
        for (j=0; j<m; j++)
        {
                if (strcmp(word[p], word[i])==0)
                                flag=0;
        }
    }
    if (flag==1)
    {
        for (j=0; j<m; j++)
        rezult[z][j]=word[p][j];
        z++;
    }
    }
//закончили обработку
//вывод 
    cout<<"Before:"<<endl;
    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
             {
                      cout<<word [i][j]<<" ";
             }
        cout<<endl;
    }
    
    cout<<"After:"<<endl;
    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
        {
                cout<<rezult[i][j]<<" ";
        }
        cout<<endl;
    }

    system("Pause");//задержка экрана
    return 0;
}

Надеюсь, код будет понятен  smile

Добавлено через 1 минуту и 35 секунд
Компилятор ошибку не выводит, но в рез. массив записывается фигня какая-то. Ошибка где-то в части кода "обработка"


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
Carlos0N
  Дата 26.11.2009, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну вроде бы работает, ошибка правда все равно есть, но она возникает в том месте где ты строки обрабатываешь... т.е. чтото с алгоритмом не так, мне лень в этой куче циклов разбиратся, тебе видней что там делается))

Код

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

using namespace std;

int main()
{
    int n=0, m=0, i=0, j=0, p=0, flag=1;
//ввод строк
    cout<<"Vvedite tseloe m - dliny odnoi stroki\n";
    cin>>m;

    cout<<"Vvedite tseloe n - kolichestvo strok\n";
    cin>>n;

    char** word;
    char** rezult;
    word = new char*[n];
    for( int i = 0; i < n; ++i ) 
    {
        word[i] = new char[m+1];
            
    }
    rezult = new char*[n];
    for( int i = 0; i < n; ++i ) 
    {
        rezult[i] = new char[m+1];
            
    }
        
    cout<<"Vvedite matritsy:\n";
    for (i=0; i<n; i++)
    for (j=0; j<m; j++)
        cin>>word[i][j];
//закончили ввод
//обработка строк, выбор нужных и запись их в рез. массив строк    
    int z=1;
    for (p=0; p<n; p++)
    {
    for (i=p+1; i<n; i++)
    {
        for (j=0; j<m; j++)
        {
                if (strcmp(word[p], word[i])==0)
                                flag=0;
        }
    }
    if (flag==1)
    {
        for (j=0; j<m; j++)
        rezult[z][j]=word[p][j];
        z++;
    }
    }
//закончили обработку
//вывод 
    cout<<"Before:"<<endl;
    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
             {
                      cout<<word [i][j]<<" ";
             }
        cout<<endl;
    }
    
    cout<<"After:"<<endl;
    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
        {
                cout<<rezult[i][j]<<" ";
        }
        cout<<endl;
    }

    system("Pause");//задержка экрана
    return 0;
}


если я наделал сам ошибок, то не судите сторго)) я особо не вникал в дело)
PM MAIL ICQ   Вверх
Metalex
Дата 27.11.2009, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Carlos0N, что ты хотел сказать? я так и не понял. что код работает неправильно, я знаю и сам


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
586
Дата 27.11.2009, 05:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Цитата(Metalex @  26.11.2009,  21:35 Найти цитируемый пост)
Цель задачи такова: ввести строки, затем взять первую строку и перебрать все остальные. Если ни одна из них не равна первой, то первую записать в другой массив строк. Затем взять вторую и провести с ней аналогичные манипуляции. Ну и в довершение вывести оба массива строк.

Цитата(Metalex @  26.11.2009,  21:35 Найти цитируемый пост)
    char word[n][m+1];
    char rezult[n][m+1];
        
    cout<<"Vvedite matritsy:\n";
    for (i=0; i<n; i++)
    for (j=0; j<m; j++)
        cin>>word[i][j];

Причём тут матрица, когда сказано, что нужно ввести массив строк?
Решение:
Код
cout << "VVedite stroki:\n";
for(i = 0; i < n; ++i)
    cin >> word[i];


Цитата(Metalex @  26.11.2009,  21:35 Найти цитируемый пост)
                if (strcmp(word[p], word[i])==0)
                                flag=0;

Так работа идёт с матрицей или строками???
Код
#include<iostream.h>
#include<stdio.h>
#include<string.h>
int main()
{
    int /*n, m,*/ i, p;
    const int n = 5, m = 255;
//ввод строк
    /*cout<<"Vvedite tseloe m - dliny odnoi stroki\n";
    cin>>m;
    cout<<"Vvedite tseloe n - kolichestvo strok\n";
    cin>>n;   */
    char word[n][m+1];
    char rezult[n][m+1];
        
    cout<<"Vvedite stroki:\n";
    for (i=0; i<n; i++)
        cin>>word[i];
//закончили ввод
//обработка строк, выбор нужных и запись их в рез. массив строк
    int z=0;
    for (p=0; p<n; p++)
    {
        bool bFlag = false;
        for (i = 0; i < n; i++)
        {
            if(p != i && strcmp(word[p], word[i])==0)
            {
                bFlag = true;
                break;
            }
        }
        if(!bFlag)
        {
            strcpy(rezult[z], word[p]);
            z++;
        }

    }
//закончили обработку
//вывод
    cout<<"Before:"<<endl;
    for (i=0; i<n; i++)
    {
        cout<<word [i]<<endl;
    }

    cout<<"After:"<<endl;
    for (i=0; i<z; i++)
    {
        cout<<rezult[i]<<endl;
    }
    system("Pause");//задержка экрана
    return 0;
}


Это сообщение отредактировал(а) 586 - 27.11.2009, 05:53
PM   Вверх
Carlos0N
Дата 27.11.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



эмм... я хотел сказать что я исправил твои ошибки в плане тово что ты объявлял не массив строк а хз знает что, чтобы работала функция system() надо подключить библиотеку windows, ну там ещё наверно чтото есть, я непомню уже, вобщем я хотел сказать что я исправил некие недочеты которые были допущены, и теперь после исправлений ошибка возникает в той части кода где ты работаешь со строками (обрабатываешь их). просто я хотел чтобы ты сам понял в чем дело.

ты писал: Компилятор ошибку не выводит, но в рез. массив записывается фигня какая-то. Ошибка где-то в части кода "обработка"
лично у меня на vs2008 твой код не заработал.

вот работающий исходник(разноцветные буквы в качестве бонуса):

Код

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

using namespace std;

int main()
{
    setlocale(LC_CTYPE, "Russian");
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole, 5);
    int n=0, m=0, i=0, j=0, p=0, z=0;
    bool flag=false;
//ввод строк
    cout<<"Введите m - длинну строки\n";
    cin>>m;

    cout<<"Введите n - кол-во строк\n";
    cin>>n;

    char** word;
    char** rezult;
    word = new char*[n];
    for( int i = 0; i < n; ++i ) 
    {
        word[i] = new char[m];
            
    }
    rezult = new char*[n];
    for( int i = 0; i < n; ++i ) 
    {
        rezult[i] = new char[m];
            
    }
        
    cout<<"Vvedite matritsy:\n";
    for (i=0; i<n; i++)
    for (j=0; j<m; j++)
        cin>>word[i][j];
//закончили ввод
//обработка строк, выбор нужных и запись их в рез. массив строк    
    for (p=0; p<n; p++)
    {
        for (i=0; i<n; i++)
        {
            if (strcmp(word[p], word[i])==true)
                flag=true;
        }
    
        if (flag)
        {
            for (j=0; j<m; j++)
                rezult[z][j]=word[p][j];
                z++;
        }
        flag=false;
    }
//закончили обработку
//вывод 
    cout<<"До:"<<endl;
    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
             {
                      cout<<word [i][j]<<" ";
             }
        cout<<endl;
    }
    
    cout<<"После:"<<endl;
    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
        {
                cout<<rezult[i][j]<<" ";
        }
        cout<<endl;
    }

    system("Pause");//задержка экрана
    return 0;
}


Это сообщение отредактировал(а) Carlos0N - 27.11.2009, 15:05
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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