Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Методы работы с текстом.

533
11 января 2006 года
Visualex
254 / / 07.01.2005
Народ, подскажите, как можно работать с текстом, вот скажем VC6 там у меня получается

CString sWord = "word";
и обращаюсь к буквам как
dc.TextOut(x, y, sWord[0]);

а в VC7 так не получается, как можно работать с отдельными буквами слова.
т.е. я не хочу разбивать слово на отдельные компоненты типа ... = {"w", "o", "r", "d"};

вот например такой код (точнее просто смысл кода):
CString letter = "w";
for(int i = 0; i<4; i++)
{
if(sWord == letter)
MessagwBox("The letter is enable", "Congratulations!!!", MB_OK);
break;
}
расскажите подробнее пожалуйста, у меня часто такие вопросы возникают, тольком поговорить нескем.
Страницы:
398
11 января 2006 года
Alexandoros
630 / / 21.10.2005
Ты пытаешся сравнять строку с буквой, а это нехорошо.. Надо либо sWord == letter либо sWord == letter[0] либо sWord == 'w' (не " а ')
533
12 января 2006 года
Visualex
254 / / 07.01.2005
Цитата:
Originally posted by Alexandoros
Ты пытаешся сравнять строку с буквой, а это нехорошо.. Надо либо sWord == letter либо sWord == letter[0] либо sWord == 'w' (не " а ')


Да вот знаешь... я ничего не пытаюсь сравнять, я просто попытался объяснить в чем вопрос, а на VC6 прчемуто работает, я и сам удивлен!)

Вот лучше скажи как сравнить букву скажем "номер 1" в слове с заданной.

324
13 января 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Visualex
Народ, подскажите, как можно работать с текстом, вот скажем VC6 там у меня получается

CString sWord = "word";
и обращаюсь к буквам как
dc.TextOut(x, y, sWord[0]);

а в VC7 так не получается, как можно работать с отдельными буквами слова.
т.е. я не хочу разбивать слово на отдельные компоненты типа ... = {"w", "o", "r", "d"};

вот например такой код (точнее просто смысл кода):
CString letter = "w";
for(int i = 0; i<4; i++)
{
if(sWord == letter)
MessagwBox("The letter is enable", "Congratulations!!!", MB_OK);
break;
}
расскажите подробнее пожалуйста, у меня часто такие вопросы возникают, тольком поговорить нескем.



В классе CString для доступа к отдельным элементам строки есть функция GetAt(int index), где index порядковый номер элемента (начиная с 0).
Тогда твой пример примет следующий вид:

int nStrLen = sWord.GetLength();

for(int i = 0; i < nStrLen; i++)
{
if(sWord.GetAt(i) == 'w')
MessagwBox("The letter is enable", "Congratulations!!!", MB_OK);
break;
}

533
13 января 2006 года
Visualex
254 / / 07.01.2005
Во, спасибо, думаю то, что надо, только на работоспособность еще проверить неуспел.

А вот интересно на VisualC++6 почему это работает?
CString sWord = "word";
dc.TextOut(x, y, sWord[0]);
???
2.4K
13 января 2006 года
dinasok51
219 / / 12.11.2005
Цитата:
Originally posted by Visualex
Во, спасибо, думаю то, что надо, только на работоспособность еще проверить неуспел.

А вот интересно на VisualC++6 почему это работает?
CString sWord = "word";
dc.TextOut(x, y, sWord[0]);
???



В CString есть оператор [], кот- эквивлентен GetAt()
sWord[0] возвращает 'w'

533
15 января 2006 года
Visualex
254 / / 07.01.2005
Цитата:
Originally posted by dinasok51
В CString есть оператор [], кот- эквивлентен GetAt()
sWord[0] возвращает 'w'


Я конечно понимаю все эти эквиваленты, но почему тогда в 7-й версии VC у меня это не выходит?

533
15 января 2006 года
Visualex
254 / / 07.01.2005
Цитата:
Originally posted by dinasok51
В CString есть оператор [], кот- эквивлентен GetAt()
sWord[0] возвращает 'w'



Такая ошибка
d:\Мои документы\Visual Studio Projects\Proba\ProbaDlg.cpp(93): error C2664: 'CWnd::SetDlgItemTextA' : cannot convert parameter 2 from 'ATL::CSimpleStringT<BaseType>::XCHAR' to 'LPCTSTR'
with
[
BaseType=TCHAR
]


Вот в такой процедуре
void CProbaDlg::OnBnClickedButton1()
{
m_edit = "Hello";
SetDlgItemText(IDC_EDIT1, m_edit[1]);
}

9.2K
15 января 2006 года
llllDeadMan
32 / / 28.11.2005
Сделай приведение типов:
SetDlgItemText(IDC_EDIT1, (LPCTSTR)m_edit[1]);
Должно работать...
324
16 января 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by llllDeadMan
Сделай приведение типов:
SetDlgItemText(IDC_EDIT1, (LPCTSTR)m_edit[1]);
Должно работать...



В VC я бы такого никогда не делал.
1. Для IDC_EDIT1 создавай Control переменную (в VC 7 по другому нельзя) - далее через SetWindowText().
2. Но если как у тебя тогда имей ввиду, что в VC 7 (LPCTSTR) не работает - используй CString.

533
18 января 2006 года
Visualex
254 / / 07.01.2005
Цитата:
Originally posted by AndreySar
В VC я бы такого никогда не делал.
1. Для IDC_EDIT1 создавай Control переменную (в VC 7 по другому нельзя) - далее через SetWindowText().
2. Но если как у тебя тогда имей ввиду, что в VC 7 (LPCTSTR) не работает - используй CString.


Да я понимаю что SetWindowText..., я пытаюсь обратиться к элементам строки, как мне взять в VC7 букву в слове, так как я беру ее в VC6.

int CGraphicsDlg::OutLetter(CClientDC* odc, CString sStr)
{
odc->SetTextColor(RGB(0, 255, 255));
odc->SetBkMode(TRANSPARENT);
int x = 12;
int y = 14;
for (int i=0; i<sStr.GetLength(); i++)
{
if(m_letter == sStr.GetAt(i))
odc->TextOut(x, y, sStr.GetAt(i));
x+=16;
}

return 0;
}

324
18 января 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Visualex
Да я понимаю что SetWindowText..., я пытаюсь обратиться к элементам строки, как мне взять в VC7 букву в слове, так как я беру ее в VC6.

int CGraphicsDlg::OutLetter(CClientDC* odc, CString sStr)
{
odc->SetTextColor(RGB(0, 255, 255));
odc->SetBkMode(TRANSPARENT);
int x = 12;
int y = 14;
for (int i=0; i<sStr.GetLength(); i++)
{
if(m_letter == sStr.GetAt(i))
odc->TextOut(x, y, sStr.GetAt(i));
x+=16;
}

return 0;
}



VC 7 строже относится к написанию кода. Кроме как GetAt к элементам строик обратиться вряд ли получится.
odc->TextOut(x, y, CString(sStr.GetAt(i)));

533
18 января 2006 года
Visualex
254 / / 07.01.2005
Цитата:
Originally posted by AndreySar
VC 7 строже относится к написанию кода. Кроме как GetAt к элементам строик обратиться вряд ли получится.
odc->TextOut(x, y, CString(sStr.GetAt(i)));


а такого плана,... или вообще какие еще методы работы есть?
... скажем char *cWord[5] = "abcd";
а если несколько слов???
то искать определенные символы? скажем пробелы?
типа : CString sStr = "строка из слов";
тут искать пробелы?

324
19 января 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Visualex
а такого плана,... или вообще какие еще методы работы есть?
... скажем char *cWord[5] = "abcd";
а если несколько слов???
то искать определенные символы? скажем пробелы?
типа : CString sStr = "строка из слов";
тут искать пробелы?



char *cWord[5] = "abcd"; - работать не будет, пиши так - char cWord[] = {'a','b','c','d'};

А для работы со словами используй массив CString, найти символ Find, открой MSDN там весь класс CString описан.

3
19 января 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by AndreySar
char *cWord[5] = "abcd"; - работать не будет, пиши так - char cWord[] = {'a','b','c','d'};


А зачем так сложно?
Нельзя ли попроще, так
char cWord[5] = "abcd";
или вот так
char cWord[] = "abcd";

Цитата:
Originally posted by AndreySar

А для работы со словами используй массив CString, найти символ Find, открой MSDN там весь класс CString описан.


Я не вижу преимуществ у CString перед std::string, вот преимущества std::string очевидны. Поэтому рекомендую использовать std::string.

2.4K
19 января 2006 года
dinasok51
219 / / 12.11.2005
Цитата:
вот преимущества std::string очевидны.

Совсем не очевидны

3
19 января 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by dinasok51
Совсем не очевидны


Основное и главное преимущество std::string в том, что это стандартный класс. Остальные преимущества (как то переносимость и т.п.) являются следствием.

2.4K
19 января 2006 года
dinasok51
219 / / 12.11.2005
Цитата:
Originally posted by Green
Основное и главное преимущество std::string в том, что это стандартный класс. Остальные преимущества (как то переносимость и т.п.) являются следствием.


СString более гармонично вписывается в среду программирования и имеет весьма полезные функции, что ИМХО значительно важнее.
Кстати, каждый компилятор имеет свой список отклонений от стандарта, и boost в VC++8 не поддерживает Safe библ.
В общем виде вопросы о переносимости программ( за исключением довольно простых приложений с интерфейсом на уровне cin/cout ) ИМХО беспредметны.

3
20 января 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by dinasok51
СString более гармонично вписывается в среду программирования


Что это значит? :)

Цитата:
Originally posted by dinasok51

и имеет весьма полезные функции


Например?
Полезные для кого?

Цитата:
Originally posted by dinasok51

Кстати, каждый компилятор имеет свой список отклонений от стандарта, и boost в VC++8 не поддерживает Safe библ.


Фраза совсем не понятна.
При чем тут компиляторы и несоответствие стандарту?
При чем тут boost и стандарт? Когда это boost стал частью стандарта?
При чем тут boost и VC++8? Когда это boost стал частью поставки VC++ ?
Что значит "Safe библ."? thread-safe? При чем тут boost?
Что значит "boost не поддерживает библ."? Он сам по себе является "библ.", причем не thread-safe.

И главное, какое это имеет отношение к std::string?
И ещё, CString является thread-safe классом? :)

Цитата:
Originally posted by dinasok51

В общем виде вопросы о переносимости программ( за исключением довольно простых приложений с интерфейсом на уровне cin/cout ) ИМХО беспредметны.


Во-первых, в правильно спроектированных программах UI отвязан от бизнес-логики, а cin/cout - это как раз уже UI.

Во-вторых, под переносимостью нужно понимать не только кроссплатформенную переносимость, но и переход на др. компилятор или др. сопутствующие библиотеки, например оконные. Так если понадобиться перейти с MFC на WTL, Qt или сотню др. библиотек, опять же при реализации UI и сохранением бизнесс-логики без изменения, могут появится большие проблемы. Так же если придется перейти с VC++, на BC++, mingw, CodeWarrior, опять же возникнут те же проблемы.

В-третьих, то, что Std::string явл. частью стандарта позволяет использовать его в остальных стуктурах и механизмах стандарта без каких-либо доработок (например, те же потоки).

Кстати, какой CString имеется в виду? MFC или WTL?
Уже неопределенность... :)

P.S. Чувствую ещё одна длинная дискуссия намечается. В любом случае я высказываю выводы из своего опыта.

533
20 января 2006 года
Visualex
254 / / 07.01.2005
....Просто дикий ужас, какие дебри... Я просто пишу програмку, точнее уже написал (студент просил), мне интересно для себя выяснить как можно работать с текстом, я в такие дебри пока и нелезу, т.е. переносимость программ на другие платформы и т.д. Мне совершенно глубоко параллельно использовать какой класс: CString или std::string. Мне пока как неопытному программисту важно само решение условия а не переносимость...
да тут и вовсе дискуссия развивается...
3
20 января 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Visualex
....Просто дикий ужас, какие дебри... Я просто пишу програмку, точнее уже написал (студент просил), мне интересно для себя выяснить как можно работать с текстом, я в такие дебри пока и нелезу, т.е. переносимость программ на другие платформы и т.д. Мне совершенно глубоко параллельно использовать какой класс: CString или std::string. Мне пока как неопытному программисту важно само решение условия а не переносимость...
да тут и вовсе дискуссия развивается...



Тогда для начала разберись в чем отличие между символом 'w' и строкой "www", между типом char и char*. Определи какой тип возвращает оператор [] в данном случае.

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

2.4K
21 января 2006 года
dinasok51
219 / / 12.11.2005
2 Green
Тема форума см выше. Все высказанное относится к CString соответственно теме, если не понятно о чем речь.

CString как известно в MFC, кот. написана (если не придираться к мелочам ) в едином стиле. А std::string сюда не вписывается никак. Ee функции полезны ИМХО для работы. Напр. Format(...). Все в одном классе - очень удобно.
А чтоб в std сформатировать? Использовать fprint? Свое ваять? Еще какую-нибудь библ. использовать? А при этом преобразования типов?
И это очевидные преимущества?

По поводу стандарта.
Стандарт сам по себе ИМХО смысла не имееет и создается ради совместимости(переносимости). В С++ переносимость увы не сбылась, что я и пытался донести на примере boost, ибо недавно ты рекомендовал именно ее. Посмотри на их сайт - там проблемы с VC8 изложены.

Главный же вопрос ИМХО состоит в следующем:
- или ты используешь постоянно развивающейся инструментарий разработки, кот все дальше отклоняется от стандарта.
- или следуешь стандарту ради соблюдения стандарта с заморочками типа выше приведенных

Я предпочитаю первое( не сразу конечно, а после 1 servicepack'а). STL я использую весьма охотно, и std::string в частности, но совсем не потому что это стандарт, а т.к. считаю ее более подходящей в какой-либо конкретной ситуации.

По поводу переносимости в последний раз:
-Я считаю, что С++ не предназначен для написания переносимых предложений. Желающие могут поупражняться вставлять бесчисленные #if - #else - #endif необозримой вложенности и попытаться отладить это на 2-3 платформах. Я на эту тему в дискуссию не вступаю
3
22 января 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by dinasok51
2 Green
Тема форума см выше. Все высказанное относится к CString соответственно теме, если не понятно о чем речь.


Ну вообще-то тема имеет более общеее звучание: "Методы работы с текстом". И как выяснилось в ходе обсуждения, у автора проблема не с CString, а скорее с пониманием типов C-string и char.
Это не страшно, все когда-то начинали, но пробел надо устранить самостоятельно.

Цитата:
Originally posted by dinasok51

CString как известно в MFC,


Как известно, в WTL тоже есть свой CString.
И я не удивлюсь, что и в др. библиотеках есть одноименный класс.

Цитата:
Originally posted by dinasok51

Напр. Format(...). Все в одном классе - очень удобно.


Например, Format(...) - жуткое наследие C, без типовой безопасности, run-time парсингом и огромным потенциалом для ошибок. А преобразований типов в ней только одно void* -> type, где type получается парсингом строки в рантайме, и никак не застраховано от ошибок приведения типов.

Цитата:
Originally posted by dinasok51

А чтоб в std сформатировать? Использовать fprint? Свое ваять? Еще какую-нибудь библ. использовать? А при этом преобразования типов?


Ну вот, оказывается, всё от пробелов в опыте и знании...
Для формирования строк очень удобно использовать потоки. Там тебе и типовая безопасность и безопасное "преобразование типов". И всё делается в процессе компиляции.

Цитата:
Originally posted by dinasok51

По поводу стандарта.
Стандарт сам по себе ИМХО смысла не имееет и создается ради совместимости(переносимости).


Интересно, а ГОСТ на кефире тоже для совместимости? И переносимости? :D

Цитата:
Originally posted by dinasok51

В С++ переносимость увы не сбылась,


Ещё один пророк-любитель?

Цитата:
Originally posted by dinasok51

Главный же вопрос ИМХО состоит в следующем:
- или ты используешь постоянно развивающейся инструментарий разработки, кот все дальше отклоняется от стандарта.


Это CString и MFC "постоянно развивающейся инструментарий разработки, кот все дальше отклоняется от стандарта"? :D
А при чем тут стандарт?
А при чем тут развивающийся, да ещё и "постоянно"?

Цитата:
Originally posted by dinasok51

По поводу переносимости в последний раз:


Отлично, что в последний раз, т.к. опыта у тебя пока в этом вопросе явно маловато (пока).
Без обид.

Цитата:
Originally posted by dinasok51

-Я считаю, что С++ не предназначен для написания переносимых предложений. Желающие могут поупражняться вставлять бесчисленные #if - #else - #endif необозримой вложенности и попытаться отладить это на 2-3 платформах. Я на эту тему в дискуссию не вступаю


Отлично, что не вступаешь в дискуссию, т.к. мы на этом самом "непереносимом" С++ пишем под следующие платформы:
IBM PC, Sony PS2, Sony PSP, MS XBox, Nintendo GameQube; в перспективе: Sony PS3, MS XBox 360.
Как видишь это не просто разные ОС, а совершенно разные платформы. Так что не думаю, что в ходе дискуссии ты бы смог меня убедить, что мы не можем отлаживаться "на 2-3 платформах".
А без #if можно и нужно обходится, слава богу это не сложно.

2.4K
22 января 2006 года
dinasok51
219 / / 12.11.2005
По поводу кефира советую еще раз прочесть название темы.

Был задан простой и конкретный вопрос: что использовать для форматирования? И получили в ответ? Format() плох, нечто невразумительное про потоки на этапе компиляции и т.п.

О преобразовании типов я упомянул лишь потому, что CString его не требует( Если все CString ). А ты про меня.

А что с boost?

Вот мы и подошли к методу ведения дискуссии.


Уважаемый Green

Вместо ответа на вопрос ты:
- уводишь тему в сторону
- вырываешь из контекста фразу или отдельные слова, полностью искажая смысл сказанного и комментируешь этот тобой искаженный смысл
- стыдливо замалчиваешь неудобные вопросы
- когда подобные аргументы кончаются, ты переходишь на обсуждение качеств опонента

Дискутировать в таком некоструктивном духе не интересно и неприятно. А опускаться на твой уровень и высказаться по поводу твоих качеств - не мой стиль.

Ну и по поводу пререносимости в самый самый последний раз - наверное на уровне Nintendo можно написать что-то, что будет компилироваться и на Sony. Не наверное, а скорее всего можно.
3
23 января 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by dinasok51
По поводу кефира советую еще раз прочесть название темы.


Нечего на название темы пинять, если ты сам предложил сравнить преимущества CString и std::string и их очевидность. Или я тебя неправильно понял?

Цитата:
Originally posted by dinasok51

Был задан простой и конкретный вопрос: что использовать для форматирования? И получили в ответ? Format() плох, нечто невразумительное про потоки на этапе компиляции и т.п.


1. Был дан вразумительный ответ: для работы со строками лучше использовать std::string. Тебя это возмутило, вот с тобой и веду беседу уже в отрыве от остального контекста.
2. Слово Format вообще не упоминалось до последних постов. Что же касается самого этого метода, я высказал своё отношение - плохая практика использовать void* в С++.
3. Если про потоки и про этап компиляции тебе было что-то не понятно, переспроси, я объясню.

Цитата:
Originally posted by dinasok51

О преобразовании типов я упомянул лишь потому, что CString его не требует( Если все CString ). А ты про меня.


Какое преобразование? Чего не требует?
Раскрой свою мысль.
И что про тебя?

Цитата:
Originally posted by dinasok51

А что с boost?


А что с boost? Ну не поддерживает он НЕСТАНДАРТНУЮ "Safe" C++ Library" ну и что? Ну и нафига она ему сдалась? И при чем тут стандарт?
Чего здесь раздувать из мухи слона? Ты можешь объяснить, что тебя здесь пугает?

Цитата:
Originally posted by dinasok51

Вот мы и подошли к методу ведения дискуссии.

Уважаемый Green

Вместо ответа на вопрос ты:
- уводишь тему в сторону
- вырываешь из контекста фразу или отдельные слова, полностью искажая смысл сказанного и комментируешь этот тобой искаженный смысл
- стыдливо замалчиваешь неудобные вопросы
- когда подобные аргументы кончаются, ты переходишь на обсуждение качеств опонента


Давай начнем с последнего, качества опонента я никогда не обсуждаю, это с успехом делаете вы (конкретно ты и ещё некоторые лица).
Что же касается моих замечаний о недостатке опыта в некоторых вопросах, где ты весьма категоричен, то это не обсуждение твоих качеств, а просто замечание, что не стоит делать поспешных и категоричных выводов.
Есть ещё места, где я притеснил твое самолюбие? Где я обсуждал твои качества или качества других (конкретные места, плз)?
Пока, как я вижу мы обсуждаем меня (в который раз).
На счет увода в сторону, неудобных вопросов и т.п. Я веду беседу, как умею. Для меня нет неудобных вопросов. Ответы, которые очевидны, я выбрасываю, зачем разводить воду. Если тебе хочется все же получить ответ на вопрос, который я "замалчиваю", задай его прямо и внятно. Некоторый вопросы вообще осмыслению не поддаются.
На счет искаженного смысла... Ну как смысл передал, так я его и воспринял. Может здесь не на меня пенять, а на стиль всоего изложения? Я кстати, каждый раз задаю множество вопросов после твоего изложения и пока ни разу не увидел на них вменяемого ответа. "Стыдливо замалчиваешь неудобные вопросы"?

Цитата:
Originally posted by dinasok51

Дискутировать в таком некоструктивном духе не интересно и неприятно. А опускаться на твой уровень и высказаться по поводу твоих качеств - не мой стиль.


Да ну? Ты же этому посвятил целую главу своего поста и не только в этого.

Цитата:
Originally posted by dinasok51

Ну и по поводу пререносимости в самый самый последний раз - наверное на уровне Nintendo можно написать что-то, что будет компилироваться и на Sony. Не наверное, а скорее всего можно.


В каком контексте ты это говоришь?
Если в контексте "платформы на столько схожи", то ты глубоко ошибаешься. Здесь уж тебе придется поверить моему опыту.
Если же в контексте "язык С++ предоставляет возможность написания переносимого кода", то здесь я с тобой полностью согласен. :)

P.S. Надеюсь, достаточно обсуждать меня (хотя бы в этой теме). Что там у нас осталось не закрытое? Потоки и этап компиляции... Пиши, что не понятно, объясню.

324
23 января 2006 года
AndreySar
532 / / 01.08.2004
Для каждой задачи нужна своя реализация. В данном случае надо написать простую задачку работы со строками, для этого наилучшим способом подходит CString из MFC. В нем предусмотрены все операции со строками и нет смысла использовать std::string
2.4K
23 января 2006 года
dinasok51
219 / / 12.11.2005
2 Green
Так что же ты все-таки применяешь для форматирования?

Ответ хотелось бы в виде:
- библиотека "ИМЯ БИБЛИОТЕКИ"
- класс "ИМЯ КЛАССА"
- функция "ИМЯ ФУНКЦИИ"
3
23 января 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by dinasok51

Для каждой задачи нужна своя реализация. В данном случае надо написать простую задачку работы со строками, для этого наилучшим способом подходит CString из MFC. В нем предусмотрены все операции со строками и нет смысла использовать std::string


Что сложного в std::string? Не понимаю...
Что значит нет смысла использовать... тогда и CString нет смысла использовать.
Ну да ладно, проехали.

Цитата:
Originally posted by dinasok51
2 Green
Так что же ты все-таки применяешь для форматирования?

Ответ хотелось бы в виде:
- библиотека "ИМЯ БИБЛИОТЕКИ"
- класс "ИМЯ КЛАССА"
- функция "ИМЯ ФУНКЦИИ"



- библиотека: STL, в некоторых случаях boost
- классы (по сложности задачи): string, stringstream, format (boost, но это уже экзотика)
- функции: методы вышеобозначенных классов, некоторые механизмы из boost (к примеру lexical_cast).

P.S. Что там на счет неотвеченных вопросов?

2.4K
23 января 2006 года
dinasok51
219 / / 12.11.2005
 
Код:
// Без include тк VS все уже сгенерила
CString sMyString;
sMyString.Format("I am %d years old", 100 );


Green,

Напиши, пожалуйста, свой вариант этого примера со свеми необходимыми заголовочными файлами
3
23 января 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by dinasok51
 
Код:
// Без include тк VS все уже сгенерила
CString sMyString;
sMyString.Format("I am %d years old", 100 );


Green,

Напиши, пожалуйста, свой вариант этого примера со свеми необходимыми заголовочными файлами


 
Код:
#include <sstream>

std::ostringstream os;
os << "I am " << 100 << " years old";

std::string str = os.str();   // если есть необходимость
533
23 января 2006 года
Visualex
254 / / 07.01.2005
Green & dinasok51 пожалуйста больше не обсуждайте людей либо дуг друга, так как это все написано, в разговорной речи некоторое более понятно с высказыванием в правильной интонации. Ибо было сказано Глупые обсуждают людей, а умные идеи... Мне скажем не очень было приятно, что Green попал прямо в точку, я действительно не очень разбираюсь в работе с текстом char, char*, CString или же std::string буду над этим работать, стараться... Я в принципе даже и создал тему для этого. Вот теперь я немного знаю как можно работать с текстом, хотябы от чего отталкиваться. Иначе кроме массивов char я раньше ничего не знал. А дискуссия, это есть очень хорошо, только когда она не касается психологических сторон человека, а касается знаний...
Green подскажи пожалуйста где можно найти информацию по std::string. MSDN у меня январь 2002 года, ну раз std:: то думаю это что-то "стандартное", и появилось раньше 2002 года так что должно быть, только мне не попадается.
2.4K
23 января 2006 года
dinasok51
219 / / 12.11.2005
Visualex,
Цитата:
Originally posted by Green
Я не вижу преимуществ у CString перед std::string, вот преимущества std::string очевидны.

ИМХО это высказывание некорректно и может ввести в заблуждение.

Green, три объекта в твоем примере + 2 преобразования совсем не являются очевидными преимуществами std::string.
Удобство форматирования с пом. потоков весьма условное.
СString совсем не так уж плох и не надо людей пугать "огромным потенциалом для ошибок"

Цитата:
Originally posted by Green
Что сложного в std::string? Не понимаю...
Что значит нет смысла использовать... тогда и CString нет смысла использовать.


AndreySar высказал свое мнение, а ты его сразу анафеме.


Хоть и не ко мне MSDN найдешь здесь англ а здесь русск

533
24 января 2006 года
Visualex
254 / / 07.01.2005
Цитата:
Originally posted by dinasok51
Visualex,
ИМХО это высказывание некорректно и может ввести в заблуждение.

Green, три объекта в твоем примере + 2 преобразования совсем не являются очевидными преимуществами std::string.
Удобство форматирования с пом. потоков весьма условное.
СString совсем не так уж плох и не надо людей пугать "огромным потенциалом для ошибок"


AndreySar высказал свое мнение, а ты его сразу анафеме.


Хоть и не ко мне MSDN найдешь здесь англ а здесь русск


MSDN у меня дома на пк есть, в инете дорого было, так покупал когдато диски.

533
24 января 2006 года
Visualex
254 / / 07.01.2005
Но за ссылку всеравно спасибо, я вобще и незнал что русская MSDN есть!!!:!!!:
3
24 января 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by dinasok51

Green, три объекта в твоем примере + 2 преобразования совсем не являются очевидными преимуществами std::string.
Удобство форматирования с пом. потоков весьма условное.
СString совсем не так уж плох и не надо людей пугать "огромным потенциалом для ошибок"


Не знаю, где ты там нашел три объекта, и о каких именно преобразованиях ты говоришь...
Но преимущества очевидны, я повторюсь:
- нет парсинга в рантайме,
- нет использовани void*,
- четкий контроль типов компилятором, а не только программистом.

Этого нет в коде формата printf.
Я пытаюсь довести, что внутри printf-подобного кода преобразований не меньше, но они там в рантайме, т.е. выполняются на каждом вызове функции (!). Ты представляешь, какой там внутри кипящий котел?
Представь огромное предложение в середине которого %i. Машина каждый раз будет перелопачивать этот код, чтоб найти этот заветный %i и вставить туда результат преобразования.

Далее этот пресловутый void*, по большому счету контроль сваливается на плечи программиста, который должен следить за правильным количеством аргументов и соотв. их типов, указывая тип дважда (один раз применением переменной, а второй раз раскрывая что за тип этой переменной в строке для парсинга).
Кроме того типы должны быть POD-ам, т.е. стандартными int, float, char* и т.п. Ничего нового ввести нельзя.

Ну и потом эта запись "i=%i d=%d c=%c s=%s" не так явна, как "i=" << i << "d=" << d << "c=" << c << "s=" << s

Из всего перечисленного мне больше всего не нравится void*, т.к. я его в С++ совсем не терплю. :)

3
24 января 2006 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Visualex
Green подскажи пожалуйста где можно найти информацию по std::string. MSDN у меня январь 2002 года, ну раз std:: то думаю это что-то "стандартное", и появилось раньше 2002 года так что должно быть, только мне не попадается.


Да, std::string - это стандартная вещь и описана она в стандарте С++. Я всем советую (и сам придерживаюсь этого совета), что стандарт учить надо, хотя бы в первом приближении. Поэтому вот ссылка на стандарт (2003):
http://anatolix.naumen.ru/files/books/CPPStandard2003.zip

Но сразу предупреждаю, что это сложно.

А на счет MSDN 2002, описание std::string в нем конечно же есть, но искать его надо как basic_string, т.к. сам std::string - это инстанированный типос char класс basic_string.
Еще глянь в MSDN "string class STL samples".

430
24 января 2006 года
craftyfox
157 / / 20.02.2000
Цитата:
Originally posted by Visualex
где можно найти информацию по std::string. MSDN у меня ...


Мне, помнится, с помощью MSDN с STL разобраться не удалось, возможно стоит поискать
"C++ Standard Library, The: A Tutorial and Reference" by Nicolai M. Josuttis (была, помнится, на сайте anatolix'а), так же "Effective STL" Скотта Мейерса.

2
24 января 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by craftyfox
Мне, помнится, с помощью MSDN с STL разобраться не удалось, возможно стоит поискать
"C++ Standard Library, The: A Tutorial and Reference" by Nicolai M. Josuttis (была, помнится, на сайте anatolix'а), так же "Effective STL" Скотта Мейерса.



автору темы. вот немного про STL. попытайся также найти книгу Амерааля "STL для программистов на С++"
http://pegasus.rutgers.edu/~elflord/cpp/stdlib/

к дискусии. мне, как человеку, который далек от программирования, непонятно, зачем использовать гибрид С & С++ в виде

Цитата:

CString sMyString;
sMyString.Format("I am %d years old", 100 );


если вы пишете на С++? я всегда думал что это два разных языка. а преобразования подобные printf - по моему не С++ way ;)
впрочем, может я чего то не понимаю?

255
24 января 2006 года
Dart Bobr
1.4K / / 09.04.2004
Скажу свое мнение.
CString является для меня абсолютно бесполезной и ненужной вещью, так как привязывает к MFC или WTL или ... Я практически никогда не использую этих библиотек. Win32 Application и вперед. То-есть стандартные возможности С++ рулят. Для работы с потоками мне ничего не нужно, а для CString...
То-есть очко в пользу Green'a
Не в обиду dinasok51. ;)
2.4K
24 января 2006 года
dinasok51
219 / / 12.11.2005
Книга по STL ("C++ Standard Library, The: A Tutorial and Reference" by Nicolai M. Josuttis) по русски в формате djvu здесь
а DjVU Plug-in брать тут
2.4K
24 января 2006 года
dinasok51
219 / / 12.11.2005
Цитата:
Originally posted by Green
Не знаю, где ты там нашел три объекта, и о каких именно преобразованиях ты говоришь...
Но преимущества очевидны, я повторюсь:
- нет парсинга в рантайме,
- нет использовани void*,
- четкий контроль типов компилятором, а не только программистом.

Этого нет в коде формата printf.
Я пытаюсь довести, что внутри printf-подобного кода преобразований не меньше, но они там в рантайме, т.е. выполняются на каждом вызове функции (!). Ты представляешь, какой там внутри кипящий котел?
Представь огромное предложение в середине которого %i. Машина каждый раз будет перелопачивать этот код, чтоб найти этот заветный %i и вставить туда результат преобразования.

Далее этот пресловутый void*, по большому счету контроль сваливается на плечи программиста, который должен следить за правильным количеством аргументов и соотв. их типов, указывая тип дважда (один раз применением переменной, а второй раз раскрывая что за тип этой переменной в строке для парсинга).
Кроме того типы должны быть POD-ам, т.е. стандартными int, float, char* и т.п. Ничего нового ввести нельзя.

Ну и потом эта запись "i=%i d=%d c=%c s=%s" не так явна, как "i=" << i << "d=" << d << "c=" << c << "s=" << s

Из всего перечисленного мне больше всего не нравится void*, т.к. я его в С++ совсем не терплю. :)



Виноват, обсчитался - 2 объекта.
Вот определение из MSDN

 
Код:
CString::Format
void Format( LPCTSTR lpszFormat, ... );
void Format( UINT nFormatID, ... );
Здесь никакого void* нет.
Алгоритмы парсинга уже давно отлажены и никаких проблем не представляют.
Преобразования в текстовый формат везде выролняются runtime. ( не будешь же ты утверждать что "i=" << i производится в процессе компиляции)
При введении новых типов нужно определять оператор "<<". Возможности форматирования СString также могут быть расширены.
Обе приведенные тобой строки ИМХО одинаково нечитабельны

Действительно ИМХО существенное отличие - это необходимость задавать тип форматирования в отрыве от формата данных. Однако вызванные этим ошибки легко локализуются, т.к. тут же видишь их последствия.

Но для безусловность преимуществ этого ИМХО недостаточно.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог