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

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

Войти
Регистрация
Восстановить пароль
 
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

Строки в с++ типа явовских - C++

09.06.2014, 13:43. Просмотров 526. Ответов 13
Метки нет (Все метки)

Можно ли создать строковый класс типа явовских? Или есть ли готовые решения?

Пишу свой мультиплатформенный мини-фреймворм для удобной работы со строками на основе MinGW... (для отладке в винде и компиляции под андроид)

Когда-то на лекции расказывали что можно "подделать" даже арифметические операции над строками вроде "+" (для сложения самописных классов вроде таблиц).
Работы со строками предстоит много и заморачиваться с char* или LPCTSTR не хочу. К тому-же в андроиде и в винде слегка разные подходы к отображению отладочных строк.

Уже начал писать свой класс... но... Может есть готовые классы? Не хочу изобретать велоис

В иделале хочу наделать заготовок типа "фыва"+"йцук", "фыва"+123, "фыва"+true, ToInt, FromInt, ToFloat... А уж потом просто с ними работать... Потери скорости меня не пугают! Лишь бы код стал читабельным!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2014, 13:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Строки в с++ типа явовских (C++):

Возврат объекта шаблонного типа от типа Type из специализации шаблона метода от того же типа - C++
Доброго времени суток, пишу класс содержащий несколько std::set от разных типов, нужно сделать метод возвращающий указатель на нужное...

Строки типа string - C++
Словом, входящим в состав строки, назовѐм непрерывную последовательность символов, ограниченную символами–разделителями, началом и концом...

Определить длину строки типа _TCHAR - C++
Подскажите пожалуйста какой функцией можно определить длину строки типа _TCHAR?

Проверка на NULL строки типа Int - C++
Добрый день! в С++ можно сказать второй день Нужно после совершения действий выводить данные что было изменено и на что. ...

Ввод строки типа {a,b,c,d,f,{a,b,c,f},g,h,j}, исправить код - C++
Доброго времени суток всем, в общем нужно мне реализовать такую задачу: Ввод строки типа {a,b,c,d,f,{a,b,c,f},g,h,j} Что должно быть на...

Удаление символов из строки типа char - C++
Существует ли какая-либо функция для удаления элементов строки char? Или придется "сдвигать" массив в цикле? Может быть есть еще какие-то...

13
Jewbacabra
Эксперт PHP
2593 / 2187 / 819
Регистрация: 24.04.2014
Сообщений: 6,497
09.06.2014, 13:46 #2
Tester64, std::string, std::wstring
1
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
09.06.2014, 13:52  [ТС] #3
Цитата Сообщение от Jewbacabra Посмотреть сообщение
std::string
Андроидовский компилятор не знает что такое
#include <iostream>
Подозреваю что это чисто виндовая фишка...
0
ValeryS
Модератор
6679 / 5088 / 475
Регистрация: 14.02.2011
Сообщений: 17,077
09.06.2014, 13:54 #4
Цитата Сообщение от Tester64 Посмотреть сообщение
Подозреваю что это чисто виндовая фишка...
это стандартный заголовок
внесен в стандарт
Цитата Сообщение от Tester64 Посмотреть сообщение
Андроидовский компилятор
или тупой или, скорее всего, не С++
1
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
09.06.2014, 13:54 #5
Цитата Сообщение от Tester64 Посмотреть сообщение
Подозреваю что это чисто виндовая фишка...
Ошибаетесь. Всё что в std:: это из стандартной библиотеки C++.
1
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
09.06.2014, 14:27  [ТС] #6
Цитата Сообщение от ValeryS Посмотреть сообщение
или тупой или, скорее всего, не С++
Да нет, "с++" (или частично перемешанный с простым "с")!
Не все библиотеки находит. Но вроде в общих чертах должен работать... обычные строки char* успешно обрабатывает, но это так не удобно...

Собрал один отладочный проект и компилирую его одновременно в MinGW и в Android NDK. В винде вывод отправляю в консоль(цветом), а в андроиде в его отладчик LogCat (через тестовый ява проект). Работаю только ради скорости отладки и выполнения (в 2-10 раз быстрее чем ява) в андроиде! В винде компилится и запускается 3-4 секунды. Протестить в андроиде после мелких изменений могу секунд через 25-40(собрать в библиотеки, собрать в ява пакете, отправить на устройство/эмулятор, проинсталировать там, запустить). А хочу написать небольшой транслятор (микро язык программирования на сотню команд). Работа на 90% со строками и на 50% состоит из промежуточных отладок парсера...

Цитата Сообщение от Tulosba Посмотреть сообщение
Всё что в std:: это из стандартной библиотеки C++
Спасибо! Поищу... Может перетяну если нет в стандартной поставке..

Можете посоветовать учебники/уроки (электронные) где обьясняется как подделывать "+" между классами? Все равно ведь напишу свой класс-оболочку для строк... По тому что находил, std::string дает не больше 30% команд которые мне нужны
0
ValeryS
Модератор
6679 / 5088 / 475
Регистрация: 14.02.2011
Сообщений: 17,077
09.06.2014, 14:39 #7
Цитата Сообщение от Tester64 Посмотреть сообщение
Да нет, "с++" (или частично перемешанный с простым "с")!
так он как раз может быть Си( с элементами плюсов)
есть ли new???
посмотри на ключи компилятора, бывает чтобы писать на плюсах нужен ключик, например Keil требует ключ c++
проверь пути к заголовочным файлам
наконец просто поиском поищи файл iostream

Добавлено через 1 минуту
Цитата Сообщение от Tester64 Посмотреть сообщение
По тому что находил, std::string дает не больше 30% команд которые мне нужны
создаешь свой класс наследник string и добавляешь что нужно
зачем с нуля писать?
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
09.06.2014, 15:11 #8
Цитата Сообщение от Tester64 Посмотреть сообщение
std::string дает не больше 30% команд которые мне нужны
Была тут тема на этот счет. Полистайте.
Цитата Сообщение от ValeryS Посмотреть сообщение
создаешь свой класс наследник string
На публичное наследование std::string не заточен.
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
09.06.2014, 15:30  [ТС] #9
Цитата Сообщение от ValeryS Посмотреть сообщение
создаешь свой класс наследник string и добавляешь что нужно
зачем с нуля писать?
Я и не собираюсь совсем с нуля - просто обвертку! Насколько я помню в стандарте команд 10-15 нужных... а мне нужно еще около 30-50 самописных (из тех что активно использовал в Java и Делфи) (randomstr, randomhex, copyfrom,...).

Цитата Сообщение от ValeryS Посмотреть сообщение
так он как раз может быть Си( с элементами плюсов)
есть ли new???
Пока не встречал new в примерах. Но пришлось постраться чтобы исходники хранить в cpp. Правда используется спец заголовок вида
C
1
2
3
extern "C" {
    JNIEXPORT void    JNICALL Java_com_wms_cpp_cppMain_SetString(JNIEnv* env, jobject obj, jstring str);
}
Цитата Сообщение от ValeryS Посмотреть сообщение
наконец просто поиском поищи файл iostream
Вроде есть... и даже в чужих исходниках что-то подобное нашел! Осталось понять как использовать и почему у меня не нашло, а у других находит...
0
Renji
1927 / 1325 / 299
Регистрация: 05.06.2014
Сообщений: 3,823
09.06.2014, 16:54 #10
Можете посоветовать учебники/уроки (электронные) где обьясняется как подделывать "+" между классами?
result_type operator+(const type1&left_arg,const type2&right_arg){...}
result_type type1::operator+(const type2&right_arg){...}
Вот и вся наука.
1
EVP
390 / 246 / 43
Регистрация: 14.12.2010
Сообщений: 472
09.06.2014, 17:50 #11
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Tester64 Посмотреть сообщение
Андроидовский компилятор не знает что такое
#include <iostream>
В Android.mk:
LOCAL_CPPFLAGS += -std=c++11 -frtti -fexceptions

В Application.mk:
APP_STL := gnustl_static
NDK_TOOLCHAIN_VERSION=4.8

Цитата Сообщение от EVP Посмотреть сообщение
PS: Книжку хотя бы пролистай
1
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
09.06.2014, 18:17  [ТС] #12
Цитата Сообщение от Renji Посмотреть сообщение
result_type operator+(const type1&left_arg,const type2&right_arg){...}
result_type type1::operator+(const type2&right_arg){...}
Вот и вся наука.
Спасибо! Для меня - наука! я последний раз видел это на доске лет 10-15 назад у очень нудного препода на "дополнительных" занятиях (за которые даже оценку не ставили). И понял лишь что это возможно... А сейчас решил выучить ради усиления своих возможностей на андроиде... За год-полтора одолел яву под андроид и окончательно понял какая это гадость - тормозит, исходники открыты(продавай после этого), "сборщик мусора" может убить программу без моего разрешения... и API - гадкий... Но язык там явно проще для новичка! Я месяца за 3-4 почти ВСЕ базовые конструкции явы понял - остальное изучение API. В с++ все намного сложнее. И API тоже сложнее... И война с версиями... и совместимостями... Вот и решил сначал простые мультиплатформенные удобные строки сделать...

Добавлено через 7 минут
Цитата Сообщение от EVP Посмотреть сообщение
В Android.mk:
LOCAL_CPPFLAGS += -std=c++11 -frtti -fexceptions
В Application.mk:
APP_STL := gnustl_static
NDK_TOOLCHAIN_VERSION=4.8
Неожиданно заработало! Огромное спасибо - это прорыв!
Цитата Сообщение от EVP Посмотреть сообщение
PS: Книжку хотя бы пролистай
Бумажные не люблю! Очень тяжело угадать с версией и сложностью (я новичок!). Разные компиляторы, разные направления... Большинство учат сначала среде MSVisualStudio... Большинство учат создавать окошки или работе с базами данных... Проще задать яндексу/гуглу вопрос и в первой 10 обычно есть ответ.
Электронны
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,310
19.09.2015, 14:53 #13
Я подключил ndk в Android Studio 1.3.2 все семплы запустились а вот
В Android.mk:
LOCAL_CPPFLAGS += -std=c++11 -frtti -fexceptions

В Application.mk:
APP_STL := gnustl_static
NDK_TOOLCHAIN_VERSION=4.8

Прописал. Но заголовки STL по прежнему не видны. Как быть ?? Как все же подключить STL в Android Studio 1.3.2??
0
EVP
390 / 246 / 43
Регистрация: 14.12.2010
Сообщений: 472
19.09.2015, 15:24 #14
Цитата Сообщение от yura91 Посмотреть сообщение
Прописал.
Уверен, что в нужное место?
Цитата Сообщение от yura91 Посмотреть сообщение
Но заголовки STL по прежнему не видны.
Как ты это определил? Какие заголовки?
NDK иногда делает некоторые нехорошие вещи со стандартной библиотекой.
Цитата Сообщение от yura91 Посмотреть сообщение
Как быть ??
Для начала покажи Android.mk.
Цитата Сообщение от yura91 Посмотреть сообщение
Как все же подключить STL в Android Studio 1.3.2??
Также как и в Эклипсе.
Развёрнуто можно почитать в книжке которую ранее указывал..
0
19.09.2015, 15:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2015, 15:24
Привет! Вот еще темы с ответами:

Посимвольное чтение строки типа string - C++
Здравствуйте! Подскажите, пожалуйста. У меня есть строка типа string, нужно все цифры вывести на печать. Как сделать &quot;пробежку по...

Как сравнить две строки типа string? - C++
C типом char все просто. Поиск по Фамилии и имени. char name,name1,address, dom; int h=0; cout&lt;&lt;&quot;Введите Фамилию &quot;; ...

Преобразование части строки типа char в число - C++
Доброго времени суток! Подскажите, как преобразовать строку типа char в число? Пример: Есть строка с датой в формате чч-мм-гг &quot;05-05-14&quot;....

Шифрование строки типа string методом xtea - C++
Добрый день||вечер||утро, уважаемые форумчане! Туплю неимоверно. Нужно произвести шифрование строки типа string методом xtea. ...


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

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

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