![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Fita |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 12.5.2006 Где: Литва Репутация: нет Всего: нет |
Может быть кто-нибудь сможет помочь:
Есть определенный текст в файле, который считывается в text
Задача: Каждое новое предложение в тексте начинается со строчной буквы. Необходимо эти строчные буквы заменить на заглавные. Найти длину максимального пробела между словами. Идея решения задачи у меня следующая. size_t i = strlen(tekstas); // находим длину строки Перебирая строку до конца, ищем символ ". ! ?" От них вперед отсчитываем пробелы и возвращаем индекс первой буквы i. Менем первую букву tekstas[i] = toupper(tekstas[i]); Тоже самое с пробелами: ищем индекс первого пробела, и проверяем, есть ли за ним еще пробелы. Сравниваем длину придыдущего пробела с длиной следующего. ЧТо-то компелятору не понравилось: size_t i = strlen(tekstas); Пишет: strlen' : cannot convert parameter 1 from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'const char *' Может быть есть более оптимальные решения данной задачи? |
|||
|
||||
DeadSoul |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
use strlen( tekstas.c_str() (
не путай std::string и Си-строки! -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
Fita |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 12.5.2006 Где: Литва Репутация: нет Всего: нет |
А как в данному случае вообще необходимо работать с строкой tekstas?
Выдает ошибку: '==' : no conversion from 'char *' to 'int' |
|||
|
||||
dips |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 12.5.2006 Репутация: нет Всего: нет |
вот так вот и работать8) |
|||
|
||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Зачем использовать strlen, если у textas есть Length(кажется так он обзывается в AnsiStringах)?
Если AnsiString'и существенно не деградировали, то Length() будет выполнятся быстрее связки c_str + strlen. Потому что strlen выполняется за линейное время. Можно активно использовать std::string. На входе в tmp у нас исходная строка, то требумые преобразования можно делать используя find_first_of и isalpha/toupper Что-то вроде того:
-------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Mayk
первую букву не учел -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
iter_if - возвращает первый элемент не удовлетворяющий предикату functor() find_if - возвращает первый элемент удовлетворяющий предикату functor() Это сообщение отредактировал(а) MAKCim - 13.5.2006, 15:46 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Fita |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 12.5.2006 Где: Литва Репутация: нет Всего: нет |
Спасибо всем откликнувшимся за помощь. Она действительно пригодилась.
И еще вопрос: почему строки нельзя сравнивать, как переменные (==)(!=)? И как в таком случае сравнивать строки? Это сообщение отредактировал(а) Fita - 14.5.2006, 13:12 |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
если речь о std::string, то можно так сравнивать, если речь о char*, то есть функция strcmp |
|||
|
||||
DeadSoul |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
у std::string есть переопределенные операторы == и !=, но между std::string и С-строками есть важное отличие - std::string может содержать нулевые и т.п. символы -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Fita
Если ты определил переменную str, как std::string, то запись str[i] (где i - целое) имеет тип char, а не char*. Соответственно, ты можешь str[i] сравнивать только с числами и символами, поэтому компилятор и ругнулся:
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |