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

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

Восстановить пароль Регистрация
 
DPS
 Аватар для DPS
32 / 32 / 3
Регистрация: 12.11.2011
Сообщений: 107
Завершенные тесты: 1
05.06.2012, 15:34     Применение strtok() для получения слова #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++ Тема для получения полезной информации
Функция для получения ThreadId приложения C++
C++ strtok для string
Можно ли разбить строки на слова при strtok и обратиться к нужному слову? C++
strtok только для слов C++
C++ Функция для получения пути к приложению
C++ Алгоритм Маркова для получения палиндрома
Каково практическое применение ключевого слова "protected" ? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
05.06.2012, 19:05     Применение 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
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;
}
Yandex
Объявления
05.06.2012, 19:05     Применение strtok() для получения слова
Ответ Создать тему
Опции темы

Текущее время: 12:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru