Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Замена символа в строке |
Автор: Fita 13.5.2006, 00:29 | ||
Может быть кто-нибудь сможет помочь: Есть определенный текст в файле, который считывается в 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 13.5.2006, 00:52 |
use strlen( tekstas.c_str() ( не путай std::string и Си-строки! |
Автор: Fita 13.5.2006, 01:13 | ||
А как в данному случае вообще необходимо работать с строкой tekstas?
Выдает ошибку: '==' : no conversion from 'char *' to 'int' |
Автор: dips 13.5.2006, 08:37 | ||
вот так вот и работать8) |
Автор: Mayk 13.5.2006, 13:52 | ||
Зачем использовать strlen, если у textas есть Length(кажется так он обзывается в AnsiStringах)? Если AnsiString'и существенно не деградировали, то Length() будет выполнятся быстрее связки c_str + strlen. Потому что strlen выполняется за линейное время. Можно активно использовать std::string. На входе в tmp у нас исходная строка, то требумые преобразования можно делать используя find_first_of и isalpha/toupper Что-то вроде того:
|
Автор: MAKCim 13.5.2006, 15:26 |
Mayk первую букву не учел |
Автор: MAKCim 13.5.2006, 15:46 | ||
iter_if - возвращает первый элемент не удовлетворяющий предикату functor() find_if - возвращает первый элемент удовлетворяющий предикату functor() |
Автор: Fita 14.5.2006, 13:11 |
Спасибо всем откликнувшимся за помощь. Она действительно пригодилась. И еще вопрос: почему строки нельзя сравнивать, как переменные (==)(!=)? И как в таком случае сравнивать строки? |
Автор: Fazil6 14.5.2006, 13:42 | ||
если речь о std::string, то можно так сравнивать, если речь о char*, то есть функция strcmp |
Автор: bsa 14.5.2006, 20:54 | ||
Fita Если ты определил переменную str, как std::string, то запись str[i] (где i - целое) имеет тип char, а не char*. Соответственно, ты можешь str[i] сравнивать только с числами и символами, поэтому компилятор и ругнулся:
|