Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DPS
32 / 32 / 3
Регистрация: 12.11.2011
Сообщений: 109
Завершенные тесты: 1
#1

Применение strtok() для получения слова - C++

05.06.2012, 15:34. Просмотров 577. Ответов 1
Метки нет (Все метки)

Ребят, задача собственно, такая: у заданного текста поменять местами первое и последнее слово. Алгоритм у меня такой.
Я с помощью strtok получаю первое и последнее слова, затем, мне нужно посчитать длину текста, расположенного между ними(между первым и последним словом).
Длина текста между первым и последним словом= длина всей строки-(длина первого слова+длина последнего). Длины первого и последнего слова получаю без проблем функцией strlen.
Но вот длину всей строки я не могу посчитать, т.к. strtok изменяет исходную строку,таким образом в buffer у меня длина получается равной 3(хотя на самом деле она, как мы видим, равна 11). Как можно обойти данную проблему?
Я вижу это двумя способами:
1)Использовать strlen() до вызова strtok()
2)Копировать исходную строку в динамический массив, и затем брать длину текста из нее.

Есть ли какие-нибудь более простые пути решения данной проблемы?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>
#include<string.h>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Rus");
    
    char buffer[30]="123 456 789";
 
    cout<<"Исходный текст:  "<<buffer<<endl;
 
    char *razdelitel=" ,.";             //символ-разделитель
 
    char *slovo;                        
 
    slovo=strtok(buffer,razdelitel);    //получаем слово
 
    cout<<slovo<<endl;  
 
    cout<<"После использования strtok():  "<<endl;
    cout<<buffer<<endl;                 //выводим исходный текст
    cout<<"Длина исходной строки = ";
    cout<<strlen(buffer)<<endl;         //его длина
 
return 0;
}
Миниатюры
Применение strtok() для получения слова  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2012, 15:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Применение strtok() для получения слова (C++):

Использование STRTOK Разбить строку на слова, из слов составить список C++ Функция strtok - C++
Задача Дана строка слов с разделителями, в данном примере слова с пробелами Нужно, используя функцию strtok, сформировать из этих слов...

Можно ли разбить строки на слова при strtok и обратиться к нужному слову? - C++
Вот предположим есть какой-то текст fdjgd f.df dfdgwe wek eu fkkkk Предположим мне нужно поработать только с каким-то...

strtok для string - C++
Существует ли strtok для string? Или его аналог

Strtok для string - C++
Есть ли какая-то функция, которая осуществляет strtok для string(из &lt;string&gt;) ?

strtok только для слов - C++
Посоветуйте функцию похожую на strtok(), только что работает и со словами. Например: Есть strtok, работает так char str =...

Каково практическое применение ключевого слова "protected" ? - C++
подскажите, пожалуйста, практическое применение ключевого слова &quot;protected:&quot;. Зачем его использовать, если &quot;добраться&quot; до privet членов в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
05.06.2012, 19:05 #2
Ну вот я накидал, но мне кажется что его можно укоротить.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>
#include <iostream>
using namespace std;
 
int main(void)
{
    char str[256]={0}, str2[256]={0};
    cin.getline(str, 256);
    int last_word = 0, firs_word = 0;
    
    for(int i = strlen(str)-1; i > 0 && str[i] != ' '; i--)
    {
        last_word = i;
    }
 
    for(int i = last_word; i < strlen(str); i++)
    {
        str2[strlen(str2)] = str[i];
    }
 
    str2[strlen(str2)] = ' ';
    firs_word = strlen(strtok(str," "));
    str[firs_word] = ' ';
    for(int i = firs_word + 1; i < last_word; i++)
    {
        str2[strlen(str2)] = str[i];
        str2[strlen(str2) + 1] = '\0';
    }
 
    for(int i=0; i<strlen(str) && str[i] != ' '; i++)
    {
        str2[strlen(str2)] = str[i];
    }
 
    cout << str2 << endl;
 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2012, 19:05
Привет! Вот еще темы с ответами:

Функция для получения [i,j] элемента массива - C++
Есть следующая пирамида: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 Необходимо сделать функцию или метод для получения ...

Функция для получения пути к приложению - C++
Привет, как написать функция которая будет возвращать путь к запущенному приложении ? if( !gSplashTexture.loadFromFile( &quot;splash.png&quot; ) )...

Тема для получения полезной информации - C++
Здравствуйте! Предлогаю закрепить эту тему. Дабы не плодить темы с вопросами где находится это, как настроить то, что значит интерпритатор...

Алгоритм Маркова для получения палиндрома - C++
у меня есть программа использования алгоритма маркова для заданного слова состоящего из алфавита {a,b} что мне нужно дописать в коде что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru