С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.70
Gepar
1178 / 534 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
#1

Strtok() и string - C++

16.07.2011, 19:54. Просмотров 7617. Ответов 25
Метки нет (Все метки)

По заданию нужно воспользоваться именно strtok чтобы разбить строку что есть на слова (ориентируясь на пробелы, все знаки препинания предварительно убираются).
Собственно
C++
1
2
3
4
string str;
...
string str2=strtok(str.c_str()," "); - материться
string str2=strtok(str.data()," "); - и так тоже матерится
Собственно ошибка связана с тем что strtok отказывается жевать const (вообще странно, она же не должна менять строку так не пофиг ли ей const или не const), есть вариант по поводу того как здесь быть? Хотя я и не исключаю варианта того что автор задания имел в виду создание строки в стиле си и последующую её инициализацию данными из моей строки, а потом уже использование с ней strtok, но всё же если у кого есть варианты как получить не const символьные данные из моей строки для strtok то напишите их или если вы уверены что их точно нет то напишите об этом
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2011, 19:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Strtok() и string (C++):

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

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

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

Доступ к паре в map<string, vector<pair<string, string>>>Temp - C++
Подскажите пожалуйста как получить данные в векторе пар ? void showData(const map&lt;string, vector&lt;pair&lt;string, string&gt;&gt;&gt;Temp) { ...

strtok - C++
Привет! Решаю задачку на строки char. Возникла проблема вот код: //vuravnivanie slov po levomy i pravomy pol9m stranicu ...

strtok - C++
Скажите, если ли функция, аналог strtok, для типа string?

25
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.07.2011, 20:42 #16
http://msdn.microsoft.com/en-us/library/bz6at95h(v=vs.80).aspx
Цитата Сообщение от Gepar Посмотреть сообщение
Да ну нет же, автор написал сначала убрать с помощью функций string знаки препинания заменив их пробелами, а потом strtok() разбить строку на слова для вывода на экран ориентируясь на пробелы.
создайте временный буфер(char*, char[]), скопируйте в него стринг, и делайте через strtok, а делать такие извраты со стрингом прямой способ "выстрелить себе в ногу"

Не по теме:

что за задачник, если не секрет?

1
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,388
Записей в блоге: 2
Завершенные тесты: 1
16.07.2011, 20:42 #17
Цитата Сообщение от Gepar Посмотреть сообщение
Лучше скажите что же сделал этот const_cast с моей const символьной строкой, не гуглится он что-то у меня.
какие у нас гуглы разные)

Не по теме:

3-я ссылка - очень доходчиво объяснено.

0
nameless
Эксперт С++
334 / 298 / 14
Регистрация: 16.06.2009
Сообщений: 486
16.07.2011, 20:43 #18
Gepar, Если, кратко,
C++
1
const_cast
- аннулирует действие модификаторов const и/или volatile..
1
Gepar
1178 / 534 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
16.07.2011, 20:59  [ТС] #19
Цитата Сообщение от Kastaneda Посмотреть сообщение
какие у нас гуглы разные)
Ну да, у меня же украинский, там такого нет

Цитата Сообщение от nameless Посмотреть сообщение
- аннулирует действие модификаторов const и/или volatile..
В этом посте я тоже нашёл незнакомое слово - volatile, хотя о нём я уже почитаю на cplusplus.com, там о нём написано.
Цитата Сообщение от Maxwe11 Посмотреть сообщение
что за задачник, если не секрет?
Книга Дейтела, в ней идут задания после каждого раздела, эти идут после класса string(он у него под конец книги уже), он доходчиво пишет потому и прохожу по нему. Всякие "выучить с++ за 21 день" вызывают отвращение так как не разжёвывают что и как работает, а в основном вскользь пишут чтобы побыстрее перейти к следующей теме.

Добавлено через 6 минут
С сайта мелкософта:
You cannot use the const_cast operator to directly override a constant variable's constant status.
Вот блин, а я то думал эта const_cast будет чудеса творить
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
16.07.2011, 21:02 #20
Хм, не ожидал такого от Дейтелов... Может, они что-то перепутали, и это задание должно было быть в разделе по Си-строкам?.. Во всяком случае, не советую это упражнение выполнять таким образом, если сильно хочется - забудьте про std::string.
0
easybudda
Модератор
Эксперт CЭксперт С++
9700 / 5650 / 964
Регистрация: 25.07.2009
Сообщений: 10,873
16.07.2011, 21:15 #21
Цитата Сообщение от Gepar Посмотреть сообщение
Книга Дейтела
Может у меня не та книга (Х.М.Дейтел, П.Дж.Дейтел "Как программировать на С++" пятое малое издание), но там такого нет, да и странно было бы. Отлучать от компа надо минимум на год за такие выкрутасы! С и С++ - разные языки, и путать их не за чем.
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
16.07.2011, 21:17 #22

Не по теме:

easybudda, прежде, чем написать своё предыдущее сообщение, я заглянул в задания к разделу std::string и, к сожалению, убедился в том, что такое задание там присутствует...



Добавлено через 47 секунд

Не по теме:

И да, возможно, в малом издании этого нет, но в обычном пятом издании (которое у меня) - есть.

0
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
16.07.2011, 21:23 #23
По поводу const_cast... вот такой код уже падает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
#include <cstring>
 
int main()
{
   const char* str = "test string";
   
   char* p = strtok(const_cast <char*> (str), " ");
 
   std::cout << p << std::endl;
 
   return 0;
}
А с std::string все работает, как я понимаю, это потому, что внутри самого string'а указатель на данные не константный и память не является read only(как сказал Kastaneda), а константность берется потому, что тип возвращаемого значения у c_str - const char*, и с помощью const_cast мы убираем эту константность, а в коде выше сами данные const и соответственно read only память.
0
easybudda
16.07.2011, 21:34
  #24

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
прежде, чем написать своё предыдущее сообщение, я заглянул в задания...
А я, когда ты своё сообщение писал, как-раз этот раздел книжки в срочном порядке перечитывал. Несколько раз перелистал - нету... Таки обрезание на пользу пошло...

0
silent_1991
16.07.2011, 21:35
  #25

Не по теме:

Цитата Сообщение от easybudda Посмотреть сообщение
Таки обрезание на пользу пошло...
Видимо, да))

0
Gepar
16.07.2011, 21:58  [ТС]     Strtok() и string
  #26

Не по теме:

Я хотел 6ое найти, когда начинал изучать с++ оно уже было переведено и напечатано (а 7ое какраз только вышло на английском), но в книжных магазинах города я его не нашёл, а в инете его нету (хотя чтобы я вот это скачал из инета книгу да пользовался ею, да никогда! Я бы так, посмотрел бы есть ли это задание в ней и всё ), может в 6ом его уже тоже обрезали.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2011, 21:58
Привет! Вот еще темы с ответами:

strtok - C++
как с помощью функции strtok вывести последнее слово

strtok - C++
Почему так работает #include &lt;stdafx.h&gt; #include &lt;conio.h&gt; using namespace std; int main(){ char string = &quot;a string, of ,...

warning strtok - C++
Пишу в 10 студии: char* bla = strtok(&quot;bla bla bla&quot;, &quot; &quot;); Выдаёт варнинг: This function or variable may be unsafe. Consider using...

Не работает strtok() - C++
Здравствуйте, нужно посчитать количество слов в файле. Подскажите пожалуйста, что не так. Выводит только первую строку и все, количество...


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

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

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