Консультация № 186556
22.08.2012, 18:29
94.25 руб.
22.08.2012, 19:10
0 8 1
Здравствуйте! У меня возникли сложности, прошу Вас помочь с таким вопросом( если можно, то с комментариями ) :


Задание :
Дан односвязный линейный список, представляющий текстовую строку, содержащую слова, разделенные одним или несколькими пробелами.
Каждый элемент списка содержит один символ строки.
Разработать алгоритм, позволяющий модифицировать исходный список, добавив после каждого слова новый элемент, содержащий первый не
пробельный символ строки.
Например, для исходной строки " asdaweqrt ga nahynh " должны получить: "asdaweqrta gaa nahynha"


Заранее спасибо!

Обсуждение

Неизвестный
27.08.2012, 17:59
общий
Нельзя как нибудь ускорить процесс пожалуйста, очень нужно к 29 числу.
давно
Посетитель
7438
7205
28.08.2012, 01:38
общий
Уважаемые эксперты, посетитель очень просит помочь с консультациями 186556-186561. Остались сутки...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Профессор
399103
482
28.08.2012, 03:16
общий
это ответ
Здравствуйте, Н.М.!

Код:

#include <iostream>
#include <sstream>
#include <string>

int main()
{
std::string initialString; // исходная строка

// вводим строку
std::cout << "Enter a string: ";
std::getline( std::cin, initialString );

std::cout << "Initial string: " << initialString << std::endl;

std::stringstream ss( initialString ); // строковый поток

std::string firstWord;
ss >> firstWord;

if( !firstWord.empty() )
{
char firstSymbol = firstWord.front();

std::string newString = firstWord + firstSymbol;

// извлекаем из строкового потока слова
std::string word; // отдельное слово
while( ss >> word )
{
// и добавляем их, с первым символом и пробелом, к новой строке
newString += " " + word + firstSymbol;
}

std::cout << "New string: " << newString << std::endl;
}
else
{
std::cout << "Initial string does not contain any words" << std::endl;
}

return 0;
}
Неизвестный
29.08.2012, 01:27
общий
Спасибо большое))
Неизвестный
30.08.2012, 04:02
общий
Здравствуйте, Н.М.!
Код:

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

//Класс - элемент списка
struct Node{
public:
char Data; //Данные
Node* Next; //Усазатель на следующий элемент

Node(char vdata); //Конструктор элемента
Node(char vdata, Node* vnode); //Конструктор элемента
};

Node::Node(char vdata){
Next = NULL;
Data = vdata;
}

Node::Node(char vdata, Node* vnode){
Next = vnode;
Data = vdata;
}

//Класс - односвязный список
class LinkedList {
public:
Node* Last; //Указатель на последний элемент
Node* Head; //Указатель на первый элемент

void Add(char d); //Функция добавления значения с созданием нового элемента в конец списка
void Delete(); //Функция удаления первого элемента
void Print(); //Функция печати
LinkedList(); //Конструктор списка
};

LinkedList::LinkedList(){
Head = NULL;
Last = NULL;
}

void LinkedList::Add(char d)
{
Node* newNode=new Node(d);
if (Last == NULL) {
Last = newNode;
Head = newNode;
}else {
Last->Next=newNode;
Last=newNode;
};
}

void LinkedList::Delete()
{
Node *p;
p=Head->Next;
delete Head;
Head=p;
}


void LinkedList::Print()
{
Node *p=Head;
while(p!=NULL){
cout<<p->Data;
p=p->Next;
};
}


int main()
{
LinkedList elements;
// char letter;
Node* firstletter;

//Считываем строку с клавиатуры
cout << "Enter a string: ";
do {
// letter = cin.get(); //Считываем 1 символ
elements.Add(cin.get()); //Считываем 1 символ и добавляем считаный символ в конец списка
} while (elements.Last->Data != '\n'); //Если считаный символ равен '\n' - возврат каретки (enter), завершаем чтение строки

//Ищем элемент списка, содержащий первый не пробельный символ
firstletter = elements.Head; //Присваиваем указателю значение 1-го элемента списка
while((firstletter!=NULL)&&(firstletter->Data==' ')){ //Пока указатель не NULL и элемент содержит пробел
firstletter=firstletter->Next; //Берем следующий элемент списка
};

//Изменение строки
if (firstletter!=NULL){ //Если элемент списка, содержащий первый не пробельный символ найден ТО
Node* p = elements.Head; //Присваиваем указателю значение 1-го элемента списка
while (p!=NULL){ //Пока указатель не NULL
if ((p->Data!=' ')&&(p->Next!=NULL)&&((p->Next->Data==' ')||(p->Next->Data=='\n'))) { //Если элемент не содержит пробел И есть следующий элемент И следующий элемент содержит пробел ТО
p->Next = new Node(firstletter->Data, p->Next); //Соэдаем новый элемент, содержащий значение первого не пробельного символа и вставляем его после текущего
p = p->Next; //Берем следующий элемент списка (только что вставленный)
};
p = p->Next; //Берем следующий элемент списка
};
};

elements.Print(); //Печать списка
return 0;
}
давно
Мастер-Эксперт
680
2811
30.08.2012, 20:34
общий
Если Вы печатаете один символ (любой), пост с ним не отображается, но на Вашу почту начинают приходить посты из мини-форума. Аналогично кнопке "подписаться на мини-форум".
Неизвестный
30.08.2012, 21:52
общий
Адресаты:
Спасибо. Понял.
У меня не получается ответ дать. Не подскажите, как это правильно делается?
давно
Мастер-Эксперт
680
2811
31.08.2012, 21:14
общий
Консультация уже закрыта. Ответ надо давать пока написано Состояние: Консультация активна.
Активна она трое суток, если у Вас ответ не готов еще, но Вы собираетесь все-таки ответить, надо договориться со спрашивающим (вдруг ему ответ нужен срочно, а после какого-то времени ответ уже не нужен) и попросить модератора (любого) продлить вопрос.
Форма ответа