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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2016, 13:49   #1
xokage
 
Регистрация: 04.10.2016
Сообщений: 7
По умолчанию исключить из строки первое и последнее слова и вывести текст,который остался.

Помогите пожалуйста
xokage вне форума Ответить с цитированием
Старый 09.10.2016, 14:53   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Чё сам думаешь по этому поводу? Чё умеешь?

p.s.: хоть пустую функцию main() написать можешь?
ura_111 вне форума Ответить с цитированием
Старый 09.10.2016, 16:48   #3
xokage
 
Регистрация: 04.10.2016
Сообщений: 7
По умолчанию

Могу. И библиотеки подключать тоже умею)
Думаю вот что.
Код:
string s1 = "       delete dat shit";
    size_t f = s1.find(' ', 0);
    if (f != 0) s1.erase(0, f+1);
    else 
    {
        int p = 0;
        while (s1[p] == ' ') p++;
        s1.erase(0, p);
        f = s1.find(' ', 0);
        if (f != 0) s1.erase(0, f+1);
    }
    cout << s1;
Но надумывается только на первое слово,с последним поможете?

Последний раз редактировалось xokage; 09.10.2016 в 17:06.
xokage вне форума Ответить с цитированием
Старый 09.10.2016, 16:54   #4
xokage
 
Регистрация: 04.10.2016
Сообщений: 7
По умолчанию

Ещё как второй вариант вот что надумал.
Код:
#include <string.h> 
 #include <iostream>

   using namespace std;

 int main()
 {
	setlocale(LC_ALL, "");
    char str[80] = "удаляем первое слово ";
    char token[80];
    cout << str << endl;
      strcpy(token, strstr(str, " "));
     cout << token << endl;
 }
xokage вне форума Ответить с цитированием
Старый 09.10.2016, 18:06   #5
Максай
Пользователь
 
Аватар для Максай
 
Регистрация: 21.07.2008
Сообщений: 40
По умолчанию

Если в лоб, то можно как-то так:
Код:
#include <algorithm>
#include <cctype>
#include <functional>
#include <iostream>
#include <string>

int main()
{
    std::string s1 = "       delete dat shit ";

    // Удаляем все пробельные символы с начала строки.
    s1.erase( s1.begin(), std::find_if( s1.begin(), s1.end(), std::not1( std::ptr_fun<int, int>(std::isspace) ) ) );
    // Удаляем все символы до первого пробельного с начала строки (удаляем слово).
    s1.erase( s1.begin(), std::find_if( s1.begin(), s1.end(), std::ptr_fun<int, int>(std::isspace ) ) );
    // Удаляем все пробельные символы после слова.
    s1.erase( s1.begin(), std::find_if( s1.begin(), s1.end(), std::not1( std::ptr_fun<int, int>(std::isspace) ) ) );

    // То же самое, но с обратного конца строки.
    s1.erase( std::find_if( s1.rbegin(), s1.rend(), std::not1( std::ptr_fun<int, int>(std::isspace) ) ).base(), s1.end() );
    s1.erase( std::find_if( s1.rbegin(), s1.rend(), std::ptr_fun<int, int>(std::isspace ) ).base(), s1.end() );
    s1.erase( std::find_if( s1.rbegin(), s1.rend(), std::not1( std::ptr_fun<int, int>(std::isspace) ) ).base(), s1.end() );

    std::cout << '"' << s1 << '"' << std::endl;

    return 0;
}
P.S. А с бустом можно то же самое в три строчки сделать.
Код:
#include <cctype>
#include <iostream>
#include <functional>
#include <string>
#include <boost/algorithm/string/trim.hpp>

int main()
{
    std::string s1 = "       delete dat shit ";

    boost::algorithm::trim( s1 );
    boost::algorithm::trim_if( s1, std::not1( std::ptr_fun<int, int>(std::isspace ) ) );
    boost::algorithm::trim( s1 );

    std::cout << '"' << s1 << '"' << std::endl;

    return 0;
}
P.P.S. И Вашим способом тоже можно, только я исправил бы код следующим образом:
Код:
std::string s1 = "       delete dat shit ";

// Удаляем первое слово.
int p = 0;
while ( std::isspace(s1[p]) ) p++;
while ( ! std::isspace(s1[p]) ) p++;
while ( std::isspace(s1[p]) ) p++;
s1.erase(0, p);

// Удаляем последнее слово.
p = s1.length() - 1;
while ( std::isspace(s1[p]) ) p--;
while ( ! std::isspace(s1[p]) ) p--;
while ( std::isspace(s1[p]) ) p--;
s1.erase(p + 1);

std::cout << s1 << std::endl;

Последний раз редактировалось Максай; 09.10.2016 в 18:49.
Максай вне форума Ответить с цитированием
Старый 09.10.2016, 18:36   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Код:
#include <iostream>
#include <ctime>
#include <string>
using namespace std;

int main()
{
	string s1 = "   delete dat hgd shit ";
	
	int n_k = 0; // "координаты" 1-го и последнего слова
	bool t;

	// "нахождение" координаты 1-го слова
	t = false;
	for (int i = 0; i < s1.length(); i++)
	{
		if ((s1[i] != ' ') && (t == false))
		{
			t = true;
		}		
		if ((s1[i] == ' ') && (t == true))
		{
			n_k = i;
			break;
		}	
	}
	s1.erase(0, n_k + 1);

	// "нахождение" координаты последнего слова
	t = false;
	for (int i = s1.length() - 1; i >= 0; i--)
	{
		if ((s1[i] != ' ') && (t == false))
		{
			t = true;
		}
		if ((s1[i] == ' ') && (t == true))
		{
			n_k = i;
			break;
		}
	}
	s1.erase(n_k, s1.length()-1);

	cout << s1 << endl;

	system("pause");
	return 0;
}
ura_111 вне форума Ответить с цитированием
Старый 09.10.2016, 20:10   #7
xokage
 
Регистрация: 04.10.2016
Сообщений: 7
По умолчанию

Благодарю Вас обоих!
xokage вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исключить из строки первое и последнее слова. Kef1r Общие вопросы C/C++ 6 07.10.2016 16:51
26. Задан текст. Вывести первое слово, которое имеет заданную длину. jek09 Помощь студентам 2 15.01.2014 11:30
Дан текст из слов, разделенных пробелами. Напечатайте все слова, которые состоят из тех же букв, что и последнее слово текста hunter129 Паскаль, Turbo Pascal, PascalABC.NET 3 21.11.2013 06:47
Сравнить первое и последнее слово в строке (СИ) Pras Помощь студентам 1 27.06.2013 20:52
Поменять местами первое и последнее слова в предложении. alex.dadaev Помощь студентам 0 17.03.2011 09:39