biketrials.ru

biketrials.ru (http://biketrials.ru/live/index.php)
-   Забор (http://biketrials.ru/live/forumdisplay.php?f=13)
-   -   офф:С++ (http://biketrials.ru/live/showthread.php?t=24373)

Feo 19.06.2009 16:24

офф:С++
 
кто может решить не сложную задачу по С++ плз писать в асю 437637870

Driver 19.06.2009 16:48

Конкретней. Среда разработки, вкратце задачка, стоимость)

Feo 19.06.2009 16:56

10) Организовать ввод произвольного количества строк односвязный список. Процесс ввода должен прерываться по требованию пользователя. По окончанию процесса запрашивать у пользователя символ и удалять его из всех строк массива. После этого вывести все строки на экран. Реализовать освобождение динамически выделенной памяти по окончанию работы программы.
Из всего этого мне надо только "По окончанию процесса запрашивать у пользователя символ и удалять его из всех строк массива"

Kефир 19.06.2009 17:01

Ну если остальное уже есть - выкладывай код, а мы тебе допишем, скорее всего даже бесплатно :)

Feo 19.06.2009 17:02

большое спс,ща

Feo 19.06.2009 17:02

Код:

#include
#include
#include
using namespace std;

// определение структуры, с помощью которой будет реализовываться
// список строк
struct StringList
{
        char* pStr; // строка (указатель на неё)
        StringList* pNext; // указатель на следующий элемент списка
};


void main()
{
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
       
        StringList* pList = NULL;        // указатель на начало списка
        StringList* pCurrentElement = NULL; // указатель на текущий элемент списка

        char c = 'n';
        do
        {
                cout << "Введите строку в список " << endl;
                char* str = new char[100];
                // Ввод строки длиной максимум 99 символов
                _flushall();
                cin.getline(str, 99);
                StringList* pNewElement = new StringList;
               
                // создание нового элемента
                pNewElement->pNext = NULL;
                pNewElement->pStr = str;

                // внесение нового элемента в список
                // Если список ещё не создан...
                if(pList==NULL)
                {
                        // инициализировать указатели на начало списка и на текущий элемент списка
                        // указателем на только что созданный элемент
                        pList = pNewElement;
                        pCurrentElement = pNewElement;
                }
                // в противном случае...
                else
                {
                        // установить вновь созданный элемент следующим
                        pCurrentElement->pNext = pNewElement;
                        // переместить указатель на текущий элемент на вновь созданный
                        pCurrentElement = pNewElement;
                }

                cout << "Вы хотите продолжить ввод строк в список (y,n)? ";
                cin >> c;
        }
        while(c=='y');

        c = 'n';
        do
        {
                char c;
                cout << "Введите символ ";
                cin >> c;

                // инициализировать указатель plst адресом первого элемента
                StringList* plst = pList;
                while(plst!=NULL)
                {
                        // Если последний символ строки равен введенному...
                        if(*(plst->pStr+strlen(plst->pStr)-1)==c)
                        {
                                // Вывести эту строку на экран
                                cout << plst->pStr << endl;
                        }
                        // переместить указатель на следующий элемент
                        plst = plst->pNext;
                };

                // Запрос продолжения процесса
                cout << "Вы хотите продолжить ввод символов (y,n)? ";
                cin >> c;
        }
        while(c=='y');

        // Освобождение памяти, выделенной под массив
        while(pList!=NULL)
        {
                // сохранить указатель на следующий элемент
                StringList* pnext = pList->pNext;
                // освободить память, выделенную под текущий
                delete pList;
                // установить указатель pList на следующий элемент
                pList = pnext;
        };
}

ура!! есть тег [code]! (Master)

mil_alex 20.06.2009 17:47

фрагмент

Код:

cin >> c; // запрашиваем символ, который удалять
char *found = strchr( plst->pStr, c ); // ищем символ в строке
if (found) memmove( found, found+1, 1+strlen(found+1)); // на место найденного символа в строке копируем, начиная со следующего за ним, остаток строки, учитывая \0 в конце

memmove позволяет копировать перекрывающиеся области памяти

но можно копировать и посимвольно циклом, от найденного и пока строка не кончится
Код:

while (*found)
{
  *found = *(found+1);
  found++;
}


Feo 20.06.2009 18:24

большое спс =* =)))))))))))


Часовой пояс GMT +4, время: 09:19.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot