Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2013, 14:22   #1
XeniaZharinova
Пользователь
 
Регистрация: 18.06.2013
Сообщений: 11
Сообщение Символьный и строковый типы (C++ и Pascal)

Практика 1 курс.
Символьный и строковый типы.

Необходимо написать программу на двух языках: С++ и Pascal.
Но я не хочу тупо программу и абы как сдать, хочу разобраться, поэтому, если можно с комментариями. Математические программы на C++ и Pascal пишу, на C++ работаю ещё и с графикой, поэтому не совсем "для чайников":)

Задание:
Известно, что в исходной строке есть хотя бы один символ, отличный от пробела. Требуется преобразовать строку следующим образом. Удалить группы пробелов, которыми начинается и которыми заканчивается последовательность, а также заменить каждую внутреннюю группу пробелов одним пробелом. Если указанных групп нет в данной последовательности, то оставить последовательность без изменения.
XeniaZharinova вне форума Ответить с цитированием
Старый 19.06.2013, 14:25   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
{pascal}
var s:string;
begin
readln(s);
while s[1]=' ' do delete(s,1,1);
while s[length(s)]=' ' do delete(s,length(s),1);
{два верхних while можно заменить на trim(s); но....
только если подерживается эта функа паскалем
и не возбраняется по условию}
while pos('  ',s)<>0 do delete(s,pos('  ',s),1);
writeln(s);
end.
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 19.06.2013 в 14:27.
Mad_Cat вне форума Ответить с цитированием
Старый 19.06.2013, 14:34   #3
XeniaZharinova
Пользователь
 
Регистрация: 18.06.2013
Сообщений: 11
Сообщение

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
Код:
{pascal}
var s:string;
begin
readln(s);
while s[1]=' ' do delete(s,1,1);
while s[length(s)]=' ' do delete(s,length(s),1);
{два верхних while можно заменить на trim(s); но....
только если подерживается эта функа паскалем
и не возбраняется по условию}
while pos('  ',s)<>0 do delete(s,pos('  ',s),1);
writeln(s);
end.
Спасибо огромное, а что вы брали за "pos" и какого типа эта переменная?
XeniaZharinova вне форума Ответить с цитированием
Старый 19.06.2013, 14:39   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

http://delphibasics.ru/Pos.php
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 19.06.2013, 14:48   #5
XeniaZharinova
Пользователь
 
Регистрация: 18.06.2013
Сообщений: 11
Сообщение

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
Спасибо ещё раз огромное, разобралась, на C++ доступно показать и объяснить сможете?
XeniaZharinova вне форума Ответить с цитированием
Старый 19.06.2013, 21:18   #6
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Код:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>

using namespace std;

// Проверка условия: являются ли оба символа пробелами
bool BothAreSpaces(char c1, char c2)
{
	return c1 == ' ' && c2 == ' ';
}

int main()
{
	string s;
	// Читаем строку
	getline(cin, s);
	// Ищем первый непробел
	string::size_type pos1 = s.find_first_not_of(' ');
	// Ищем последний непробел
	string::size_type pos2 = s.find_last_not_of(' ') + 1;
	string s1;
	// Копируем часть s от pos1 до pos2 в s1, удаляя последовательно идущие символы, удовлетворяющие условию
	unique_copy(s.begin() + pos1, s.begin() + pos2, back_inserter(s1), BothAreSpaces);
	// Выводим результат
	cout << s1 << endl;
}
Somebody вне форума Ответить с цитированием
Старый 20.06.2013, 22:23   #7
XeniaZharinova
Пользователь
 
Регистрация: 18.06.2013
Сообщений: 11
Сообщение

Цитата:
Сообщение от Somebody Посмотреть сообщение
Код:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>

using namespace std;

// Проверка условия: являются ли оба символа пробелами
bool BothAreSpaces(char c1, char c2)
{
	return c1 == ' ' && c2 == ' ';
}

int main()
{
	string s;
	// Читаем строку
	getline(cin, s);
	// Ищем первый непробел
	string::size_type pos1 = s.find_first_not_of(' ');
	// Ищем последний непробел
	string::size_type pos2 = s.find_last_not_of(' ') + 1;
	string s1;
	// Копируем часть s от pos1 до pos2 в s1, удаляя последовательно идущие символы, удовлетворяющие условию
	unique_copy(s.begin() + pos1, s.begin() + pos2, back_inserter(s1), BothAreSpaces);
	// Выводим результат
	cout << s1 << endl;
}
Огромное спасибо, особенно за подробные и понятные комментарии)
XeniaZharinova вне форума Ответить с цитированием
Старый 22.06.2013, 13:07   #8
XeniaZharinova
Пользователь
 
Регистрация: 18.06.2013
Сообщений: 11
Сообщение

Цитата:
Сообщение от Somebody Посмотреть сообщение
Код:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>

using namespace std;

// Проверка условия: являются ли оба символа пробелами
bool BothAreSpaces(char c1, char c2)
{
	return c1 == ' ' && c2 == ' ';
}

int main()
{
	string s;
	// Читаем строку
	getline(cin, s);
	// Ищем первый непробел
	string::size_type pos1 = s.find_first_not_of(' ');
	// Ищем последний непробел
	string::size_type pos2 = s.find_last_not_of(' ') + 1;
	string s1;
	// Копируем часть s от pos1 до pos2 в s1, удаляя последовательно идущие символы, удовлетворяющие условию
	unique_copy(s.begin() + pos1, s.begin() + pos2, back_inserter(s1), BothAreSpaces);
	// Выводим результат
	cout << s1 << endl;
}
А не могли бы Вы это на C перевести (Борланд ругается на библиотеки и строку с функцией)?
XeniaZharinova вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Символьный и строковый типы данных mimit Помощь студентам 0 29.11.2012 23:56
Символьный и строковый типы! disel1 Паскаль, Turbo Pascal, PascalABC.NET 1 02.06.2012 18:09
Символьный и строковый тип TwEEkcs Помощь студентам 1 24.06.2009 10:25
символьный и строковый тип. ribka Помощь студентам 4 02.12.2007 13:25