powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сравнить два символа
98 сообщений из 98, показаны все 4 страниц
Сравнить два символа
    #33962943
вопрозь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как сравнить два символа в Си.

Хочу осуществить следующий алгоритм. В дельфи выглядит так
name:='Юрий Иванович';
Код: plaintext
1.
2.
3.
4.
5.
for x:= 0  to length(name) do
    begin
    if name[x] = ' ' then
    FirstName := copy(name, 0 ,x- 1 );
    MiddleName := copy(name,x+ 1 ,length(name) - x);
    end;
т.е. разбить строку из двух слов, разделенных пробелом на слова
а вот этот момент на Си не понятен
Код: plaintext
if name[x] = ' ' then
...
Рейтинг: 0 / 0
Сравнить два символа
    #33962962
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
см что-нибудь вроде strcpy

Код: plaintext
1.
2.
3.
4.
5.
6.
char* s = "Ivanov Ivan";
int i;
for( i= 0 ; s[i]!= 0  && s[i]!=' '; i++);

вот здесь strcpy или вроде того

...
Рейтинг: 0 / 0
Сравнить два символа
    #33962964
сикока
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для приличия хоть чёнить по си прочитай:)
...
Рейтинг: 0 / 0
Сравнить два символа
    #33962966
вопрозь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сикокадля приличия хоть чёнить по си прочитай:)
Прочитал. Работаю на Си с железом, а вот это не пробовал ))))
...
Рейтинг: 0 / 0
Сравнить два символа
    #33962973
сикока
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сикокадля приличия хоть чёнить по си прочитай:)

и бред про char* не слушай:)
...
Рейтинг: 0 / 0
Сравнить два символа
    #33962974
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мля. работать с железом на си, не зная языка?
...
Рейтинг: 0 / 0
Сравнить два символа
    #33962979
вопрозь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklinсм что-нибудь вроде strcpy

Код: plaintext
1.
2.
3.
4.
5.
6.
char* s = "Ivanov Ivan";
int i;
for( i= 0 ; s[i]!= 0  && s[i]!=' '; i++);

вот здесь strcpy или вроде того



Это же "копирование сроки в строку", а мне надо сравнение символов
...
Рейтинг: 0 / 0
Сравнить два символа
    #33962989
Вопрозь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklinмля. работать с железом на си, не зная языка?
Прикинь, и такое бывает. Сравнения не знаю. На JAVA и Delphi знаю, а на СЯХ не найду.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33962998
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрозь Aklinсм что-нибудь вроде strcpy

Код: plaintext
1.
2.
3.
4.
5.
6.
char* s = "Ivanov Ivan";
int i;
for( i= 0 ; s[i]!= 0  && s[i]!=' '; i++);

вот здесь strcpy или вроде того



Это же "копирование сроки в строку", а мне надо сравнение символов

обячно рядом с strcpy дают копирование от до.

ты хоть немеого поискать можешь?

экспромт, твою мать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
char* s = "Ivanov Ivan";
int i;
char *s1=new char[strlen(s)+ 1 ];
char *s2=new char[strlen(s)+ 1 ];
for( i= 0 ; s[i]!= 0  && s[i]!=' '; i++){
s1[i]=s[i];
}

s1[i]= 0 ;

s=s+i+ 1 ; //гыгы смешно, но обычно работает

for(i= 0 ; s[i]!= 0 ; i++){
s2[i]=s[i];
}

s2[i]= 0 ;
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963017
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ы?
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963034
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sscanf
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963040
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
яуж вручную прописал, да и так быстрее будет

ЗЫ
+-1 символ
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963056
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklinяуж вручную прописал, да и так быстрее будет

ЗЫ
+-1 символ

А чего не инкремент индекса?
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963066
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh Aklinяуж вручную прописал, да и так быстрее будет

ЗЫ
+-1 символ

А чего не инкремент индекса?
я написал наобум код, поэтому сообщаю: могут быть ошибки +1 или -1 символ
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963109
сикока
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
блин, умники, о херне трепаться могем, а как что чуть выше уровня новичка спросят, молчание:)
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963116
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спрашивай именно то, что выше уровня новичка, те. не найдется в поиске и зависит от опыта например
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963138
вопрозь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам оказывается "городить умею", жаль что не рационально.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
AnsiString ResultString = "Юрий Иванович";
char * text = ResultString.c_str();
int i= 0 ;
while (text[i]!=' ')
{
    i++;
}
AnsiString FirstName = ResultString.SubString( 0 ,i);
AnsiString MiddleName = ResultString.SubString(i+ 1 ,ResultString.Length());
ShowMessage("Имя: " + Trim(FirstName));
ShowMessage("Отчество: " + Trim(MiddleName));
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963142
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гы как накручено
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963144
вопрозь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklinгы как накручено
Не думаю, что предложенное выше лучше!)))
Но как вариант сойдет, тем более за незнанием нужных строковых функций. Проще наверно RegEx воспользоваться.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963150
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если только строковые фукнции копируют по 4 байта, не меньше, а иначе мой код размером не уступил, да и быстрее будет (у тебя вызовов перевызовов много)
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963166
вопрозь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklinесли только строковые фукнции копируют по 4 байта, не меньше, а иначе мой код размером не уступил, да и быстрее будет (у тебя вызовов перевызовов много)
Я в том смысле, что и твой и мой вариант всё равно не рациональны. Уверен, что есть лучше варианты. В моем плохо, что приходиться преобразовывать в другой тип переменную только для того, чтобы узнать на какой позиции пробел.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963195
сикока
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мы используем билдер, с этого надо и было начинать, а не слушать всякий бред про char* :)

зы, есть функция Pos :)
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963251
вопрозь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сикокамы используем билдер, с этого надо и было начинать, а не слушать всякий бред про char* :)

зы, есть функция Pos :)
Черт, я про неё и забыл, спасибо.)))

Код: plaintext
1.
2.
AnsiString *symbol = new AnsiString(" ");
AnsiString FirstName = ResultString.SubString( 0 ,ResultString.Pos(*symbol));
AnsiString MiddleName = ResultString.SubString(ResultString.Pos(*symbol) +  1 ,ResultString.Length());
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963284
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оставьте AnsiString в покое )
string.h зачем обидели?
Код: plaintext
1.
2.
3.
    char *name="Abcd Efjh",*s;
    strtok(name," ");
    s=strtok(NULL," ");
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963303
сикока
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну ё моё, зачем char*?
если есть средство, его нужно использовать.

Код: plaintext
1.
2.
3.
4.
5.
//если в строке гарантированно два слова через пробел, без начальных пробелов
AnsiString str = "Маша Лена";

AnsiString str_masha = str.SubString(  1 , str.Pos( ' ' ) -  1  );
AnsiString str_lena =  str.SubString( str.Pos( ' ' ) +  1 , str.Length() -  str.Pos( ' ' ) );
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963324
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сикокану ё моё, зачем char*?
если есть средство, его нужно использовать.

Чем subString и Pos лучше sprintf и strtok?

Это дело требований и вкуса.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963329
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сикокану ё моё, зачем char*?
Дело вкуса + зависит от задачи.

сикокаесли есть средство, его нужно использовать.
Эдак всё подряд переиспользуете...
Если средство максимально подходит для решения поставленной задачи, то да... ну а если нет...
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963330
вопрозь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите мне ещё аналог strcat() для AnsiString)))
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963334
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрозьПодскажите мне ещё аналог strcat() для AnsiString)))
+
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963383
вопрозь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitrii K. вопрозьПодскажите мне ещё аналог strcat() для AnsiString)))
+
Ой, ошибся, надо для char было. А это strcat() и есть. Sorry. Конец понедельника )))
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963389
сикока
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лучше/хуже тут не подходит.
AnsiString это класс, специально предназначенный для работы со строками, включающий в себя набор хорошо продуманных и удобных методов, также не нужно следить за выделением/освобождением памяти. я работал и с ансистринг и без, могу утверждать, с ансистринг на порядок удобнее:)

Dmitrii K.[
Эдак всё подряд переиспользуете...
Если средство максимально подходит для решения поставленной задачи, то да... ну а если нет...

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

вот только я на билдере сейчас не работаю.
Кстати, читал ананонс, вроде что-то новое выпускать собрались под маркой Турбо, типа, ТурбоДельфи, ТурбоБилдер и т.п. очень надеюсь на то, что это не будет разочарованием.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963433
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сикокалучше/хуже тут не подходит.
AnsiString это класс, специально предназначенный для работы со строками,

А string.h для чего создавался?
сикокавключающий в себя набор хорошо продуманных и удобных методов, также не нужно следить за выделением/освобождением памяти. я работал и с ансистринг и без, могу утверждать, с ансистринг на порядок удобнее:)
Я (мы )) ) ж и говорю (говорим) что дело вкуса. Мне, например, со string.h удобнее.
сикока
В билдере AnsiString чуть ли не базовый класс:) его сам бог велел использовать, вот каконить компонент типа работы с преславутым экселем я использовать может быть и побоюсь и сам все напишу, но ансистринг, это ансистринг:)
Не сотвори себе кумира :))

сикока
вот только я на билдере сейчас не работаю.
Кстати, читал ананонс, вроде что-то новое выпускать собрались под маркой Турбо, типа, ТурбоДельфи, ТурбоБилдер и т.п. очень надеюсь на то, что это не будет разочарованием.
Ага, ностальгия по Turbo C++ )
http://www.turboexplorer.com/
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963659
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
char * - исконное в си
а если билдер что-то прикрутил, так это не означает, что это быстрее

то что проще то и быстрее
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963662
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklinchar * - исконное в си
а если билдер что-то прикрутил, так это не означает, что это быстрее

то что проще то и быстрее
Смотря для чего. Для программирования явно лучше string
...
Рейтинг: 0 / 0
Сравнить два символа
    #33963841
сикока
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklinchar * - исконное в си
а если билдер что-то прикрутил, так это не означает, что это быстрее

то что проще то и быстрее

так мы придем к тому, что нужно юзать асм!:)
...
Рейтинг: 0 / 0
Сравнить два символа
    #33964081
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сикока
В билдере AnsiString чуть ли не базовый класс:) его сам бог велел использовать,

А хто есть бог в С/С++?
...
Рейтинг: 0 / 0
Сравнить два символа
    #33964088
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сикока Aklinchar * - исконное в си
а если билдер что-то прикрутил, так это не означает, что это быстрее

то что проще то и быстрее

так мы придем к тому, что нужно юзать асм!:)

Программирование есть дело творческое. Главное, чтобы отвечало требованиям, не глючило и код красивый был. И пиши, хоть на машинных кодах, но это уже попадет не в форум по С/С++.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33964571
вопрозь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может у кого найдется алгоритм конвертирования любого ASCII символа в Hex?
...
Рейтинг: 0 / 0
Сравнить два символа
    #33964590
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрозь в> Может у кого найдется алгоритм конвертирования любого
в> ASCII символа в Hex?
п-переведи (С)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Сравнить два символа
    #33964622
Вопрозь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас Барабас вопрозь в> Может у кого найдется алгоритм конвертирования любого
в> ASCII символа в Hex?
п-переведи (С)
Posted via ActualForum NNTP Server 1.3
Стормозил. Всё знаю)))
...
Рейтинг: 0 / 0
Сравнить два символа
    #33964629
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh сикока
В билдере AnsiString чуть ли не базовый класс:) его сам бог велел использовать,

А хто есть бог в С/С++?
А БОГ у нас един - зовется Бьерн Страуструп. И подьзлвать он велит std::string
...
Рейтинг: 0 / 0
Сравнить два символа
    #33964726
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blinded Akh сикока
В билдере AnsiString чуть ли не базовый класс:) его сам бог велел использовать,

А хто есть бог в С/С++?
А БОГ у нас един - зовется Бьерн Страуструп. И подьзлвать он велит std::string

А что так категорично? У нас есть и другие кандидаты в Бога.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33964804
вопрзь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БОГ? Мужики, раз уж говорить о Боге, то вы забыли заповеди, а одна из них гласит "Не сотвори себе кумира ..." Так что юзаем и char и AnsiString.))))
...
Рейтинг: 0 / 0
Сравнить два символа
    #33964999
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрозьКак сравнить два символа в Си.

Хочу осуществить следующий алгоритм. В дельфи выглядит так
name:='Юрий Иванович';
Код: plaintext
1.
2.
3.
4.
5.
for x:= 0  to length(name) do
    begin
    if name[x] = ' ' then
    FirstName := copy(name, 0 ,x- 1 );
    MiddleName := copy(name,x+ 1 ,length(name) - x);
    end;
т.е. разбить строку из двух слов, разделенных пробелом на слова
а вот этот момент на Си не понятен
Код: plaintext
if name[x] = ' ' then


Если юзаешь Builder C++
то можно и аналогично делфи все cделать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  AnsiString name = "Юрий Иванович"; 
  AnsiString FirstName = "", MiddleName = "";
  for (int i =  1  ; i <= str.Length(); i++)
   {
        if (name[i] == ' ')
         {
            FirstName = name.SubString( 1 ,i- 1 );
            MiddleName = name.SubString(i+ 1 ,str.Length());           
         }
   }
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965004
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ. это к слову было сказано.
мое решение не претендует на оригиннальность :)
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965029
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JibSkeartможно и аналогично делфи все cделать
не надо ...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
char * GetMiddleName(char *src)
{
  while(*src)
  {
    if (*src==' ')
    {
      *src= 0 ;
      return ++src;
    }
  }
  return  0 ;
}

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965098
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас Барабас

Так это ж strtok :)
strtok, _mbstok, wcstok
.......
The first call to strtok returns a pointer to the first character of the first token in s1 and writes a null character into s1 immediately following the returned token. Subsequent calls with null for the first argument will work through the string s1 in this way, until no tokens remain.
.......
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965121
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тем более
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965160
вопрозь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  AnsiString name = "Юрий Иванович"; 
  AnsiString FirstName = "", MiddleName = "";
  for (int i =  1  ; i <= str.Length(); i++)
   {
        if (name[i] == ' ')
         {
            FirstName = name.SubString( 1 ,i- 1 );
            MiddleName = name.SubString(i+ 1 ,str.Length());           
         }
   }
[/quot]

Я по началу так и делал, только ошибся в одном случае, я вместо
Код: plaintext
if (name[i] == ' ')
писал
Код: plaintext
if (name[i] == " ")
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965219
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh сикока
В билдере AnsiString чуть ли не базовый класс:) его сам бог велел использовать,

А хто есть бог в С/С++?
си - деннис ритчи и брайна керниган
сипп - бьярн страуструп
ни там ни там нет вышеприведенных конструкция билдера
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965225
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedА БОГ у нас един - зовется Бьерн Страуструп. И подьзлвать он велит std::string
см выше
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965246
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1)
вопрзьБОГ? Мужики, раз уж говорить о Боге, то вы забыли заповеди, а одна из них гласит "Не сотвори себе кумира ..." Так что юзаем и char и AnsiString.))))

ansistring использует то же + вызов процедуры (даже более 1 процедуры), если борланг не используется VM (чтоврядли)

2)
есть стандарт ANSI си по кторому вас из биледра не поймут, да и переходить с чистым си на скажем VC (или GNU C) проще (хотя вы врядли это сделаете)

3)
язык си близок к асму + платформенная независимость (если руки не кривые)
а вы привязываете его к борланду
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965295
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ёёёёёё!
Страшно подумать - каким было бы обсуждение, если бы нужно было сравнить один символ.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965349
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Топик разволился на две части - выбор бога сей и самый супер-пупер алгоритм разделения строки.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965468
фывафыв
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklin Akh сикока
В билдере AnsiString чуть ли не базовый класс:) его сам бог велел использовать,

А хто есть бог в С/С++?
си - деннис ритчи и брайна керниган
сипп - бьярн страуструп
ни там ни там нет вышеприведенных конструкция билдера

AnsiString это не конструкция, а обычный класс Ц++

ну и что, что его не было в оригинале.
это очень удобный класс, который активнейшем образом на каждом шагу используется в билдере, не использовать его из за того, что его нет в оригинале, извините.
кажется, в оригинале и __finally нет.
но собственно, уже все решили, кому как удобнее, тот так и делает.

а про бога было сказано в переносном смысле:)
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965481
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ваш алгоритм, приведенный выше, на супер-пупер не тянет. Скорее всего супер-пупер с точки зрения скорости - на CRT (strchr). Супер-пупер по скорости написания - с использованием string
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
//CRT
char *IO="Супер Сишник";
char *I;
char *O;
char *tmp;

if ( (tmp = strchr(IO,' ') !+ NULL){
     *tmp = '\0';
     I = strdup(IO);
     O = strdup(++tmp);
}

//stl
string IO("Супер Плюсник"), I, O;
int pos;
if ( (pos = IO.find(' ')) !=- 1 ){
     I.assign(IO.begin(),IO.begin+pos);
     O.aasign(IO.begin()+pos+ 1 ,IO.end());    
}
Какой лучше я не знаю, думаю - второй - поскольку в первом случае придётся освобождать память у I и O
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965542
фвыаыфф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ул. Бардина д 4
Проходная интстиуту машиноведения.
с 10:00 до 18:00 рабочие дни.



Aklin1)
вопрзьБОГ? Мужики, раз уж говорить о Боге, то вы забыли заповеди, а одна из них гласит "Не сотвори себе кумира ..." Так что юзаем и char и AnsiString.))))

ansistring использует то же + вызов процедуры (даже более 1 процедуры), если борланг не используется VM (чтоврядли)

2)
есть стандарт ANSI си по кторому вас из биледра не поймут, да и переходить с чистым си на скажем VC (или GNU C) проще (хотя вы врядли это сделаете)

3)
язык си близок к асму + платформенная независимость (если руки не кривые)
а вы привязываете его к борланду

1. Да, ансистринг скорее всего это не самый оптимальный подход в плане скорости, но я думаю, авторы оптимизировали там все на сколько это возможно. Но как часто нужна эта скорость?
2. Если идет работа на билдере, то это твой инструмент и нужно использовать все его возможности и функции по максимуму, его досконально изучать. А переход из компилятора в компилятор в случае написания реальных программ, это скорее исключение. Любая программа с использованием ВЦЛ по умолчанию привязана к Борланду, хоть ты тресни, бесполезно стараться делать универсальный код.
Обычно специалисты используют один инструмент долго, изучают его и т.п. Оглядываться на призрачные ВЦ и ГЦЦ нужно, но не за счёт текущей работы.
3. кроссплатформенность
без комментов:)
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965550
фвыаыфф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
фвыаыффул. Бардина д 4
Проходная интстиуту машиноведения.
с 10:00 до 18:00 рабочие дни.


к теме отношения не имеет, вставилось случайно:)
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965560
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фвыаыффк теме отношения не имеет, вставилось случайно:)зато теперь все знают ....
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965565
сикока
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я выхожу из этой дискуссии:)
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965585
Встряну в вашу дисскуссию со своим вопросом (если можно?)
Пытаюсь встроить самописную функцию. В ***.h пишу
Код: plaintext
1.
private:
        void Error();

а в ***.cpp
Код: plaintext
1.
2.
3.
4.
void Error()
{
        BeepSound( 500 , 1000 );
}
И ВЫЗЫВАЮ
Код: plaintext
1.
2.
3.
void __fastcall TfrmMain::Button11Click(TObject *Sender)
{
    Error();
}
ВЫДАЕТ ОШИБКУ

Код: plaintext
[Linker Error] Unresolved external 'TfrmMain::Error()' referenced from D:\ПРОЕКТЫ\MAPPING SOCCARD\ 1 \UNTMAIN.OBJ

Что надо сделать, чтобы заработала?
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965656
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полный чайничекЧто надо сделать, чтобы заработала?
после подробнейшего и всестороннейшего изучения документации, то бишь языка С++, добавить TfrmMain:: в нужном месте
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Сравнить два символа
    #33965788
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фвыаыфф
1. Да, ансистринг скорее всего это не самый оптимальный подход в плане скорости, но я думаю, авторы оптимизировали там все на сколько это возможно. Но как часто нужна эта скорость?
2. Если идет работа на билдере, то это твой инструмент и нужно использовать все его возможности и функции по максимуму, его досконально изучать. А переход из компилятора в компилятор в случае написания реальных программ, это скорее исключение. Любая программа с использованием ВЦЛ по умолчанию привязана к Борланду, хоть ты тресни, бесполезно стараться делать универсальный код.
Обычно специалисты используют один инструмент долго, изучают его и т.п. Оглядываться на призрачные ВЦ и ГЦЦ нужно, но не за счёт текущей работы.
3. кроссплатформенность
без комментов:)

1. Сомниваюсь, что панически.
2. Не стоит привязываться именно к компилятору. Считаю, что привязываться надо в первую очередь к языку. Использование разных компиляторов - не такая уж редкая речь. Зачастую в одном проекте у меня используется MSVC и gcc. Правда это разные программы, но все же. Например часто не мешала бы кроссплатформенность.
3. AnsiString более кроссплатфомрен? Ну, уж извените.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33966036
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полный чайничекВстряну в вашу дисскуссию со своим вопросом (если можно?)
Пытаюсь встроить самописную функцию. В ***.h пишу
Код: plaintext
1.
2.
private:

        void Error();

а в ***.cpp
Код: plaintext
1.
2.
3.
4.
void Error()
{
        BeepSound( 500 , 1000 );
}
И ВЫЗЫВАЮ
Код: plaintext
1.
2.
3.
void __fastcall TfrmMain::Button11Click(TObject *Sender)
{
    Error();
}


Код: plaintext
1.
private:
        void Error();

а в ***.cpp
Код: plaintext
1.
2.
3.
4.
void <объекть класса>::Error()
{
        BeepSound( 500 , 1000 );
}
И ВЫЗЫВАЮ
Код: plaintext
1.
2.
3.
void __fastcall TfrmMain::Button11Click(TObject *Sender)
{
    <объекть класса>.Error();
}
?
...
Рейтинг: 0 / 0
Сравнить два символа
    #33966049
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторAnsiString это не конструкция, а обычный класс Ц++

ну и что, что его не было в оригинале.
это очень удобный класс, который активнейшем образом на каждом шагу используется в билдере, не использовать его из за того, что его нет в оригинале, извините.
кажется, в оригинале и __finally нет.
но собственно, уже все решили, кому как удобнее, тот так и делает.

а про бога было сказано в переносном смысле:)

1)
то что класс си - ни о чем не говорит
щас классов си много , если не много*много*...*много} очень много раз

2)
оригинал он есть оригинал и большая часть стандартов = оригинал

3)
__fastcall по-моему есть только в билдере

4)
скорость
еслиб базы данных писали без скорости, то все бы повесились.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33966241
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
char *IO="Супер Сишник", *I,*O;
if ( (O = strchr(IO,' ')) != NULL) *O++ = '\0';
I=IO;
а зачем был нужен strdup?
...
Рейтинг: 0 / 0
Сравнить два символа
    #33966270
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и поправочка на юник
Код: plaintext
1.
2.
_TCHAR *IO=_TEXT("Супер Сишник"), *I,*O;
if ( (O = _tcschr(IO,_TEXT(' '))) != NULL) *O++ =  0 ;
I=IO;
...
Рейтинг: 0 / 0
Сравнить два символа
    #33966510
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у Бога лучше
std::string s0 = "Bjarne Stroustrup";
std::string s1 = s0.substr(0, s0.find(' '));
std::string s2 = s0.substr(s0.rfind(' ') + 1);
...
Рейтинг: 0 / 0
Сравнить два символа
    #33966654
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blindedА у Бога лучше
std::string s0 = "Bjarne Stroustrup";
std::string s1 = s0.substr(0, s0.find(' '));
std::string s2 = s0.substr(s0.rfind(' ') + 1);
А если пробела нет?
...
Рейтинг: 0 / 0
Сравнить два символа
    #33966663
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoну и поправочка на юник
Код: plaintext
1.
2.
_TCHAR *IO=_TEXT("Супер Сишник"), *I,*O;
if ( (O = _tcschr(IO,_TEXT(' '))) != NULL) *O++ =  0 ;
I=IO;

У автора всё раскладывалось в две переменные. Отсюда strdup.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33966664
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин! Нельзя редактировать - в две разные переменные. Ну и не лучший стиль - портить буфер, точнее - он не всегда безопасен. А так - вполне элегантно у вас, разве что и I не нужно.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33966737
эстет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoну и поправочка на юник
Код: plaintext
1.
2.
_TCHAR *IO=_TEXT("Супер Сишник"), *I,*O;
if ( (O = _tcschr(IO,_TEXT(' '))) != NULL) *O++ =  0 ;
I=IO;


какой ужас!
это называется напиши так, что бы смотрелось как можно мерзопакостнее. только *** юниксоид мог зафигачить такой текст и еще использовать имя переменной "О".
...
Рейтинг: 0 / 0
Сравнить два символа
    #33966786
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эстетчто бы смотрелось как можно мерзопакостнеевсё нормально видно и понятно
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Сравнить два символа
    #33967011
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blinded... Бога ... "Bjarne Stroustrup"; ....

Это только твое мнение.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33967569
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh blinded... Бога ... "Bjarne Stroustrup"; ....

Это только твое мнение.
Хорошо, я буду называть его Создатель, или и это будем опровергать?
nikname blindedА у Бога лучше
std::string s0 = "Bjarne Stroustrup";
std::string s1 = s0.substr(0, s0.find(' '));
std::string s2 = s0.substr(s0.rfind(' ') + 1);
А если пробела нет?
А как надо?
в этой интертрепации s1 == s0 && s2 == s0
ежели надо чтобы s1 == s0 && s2 == ""
std::string s1 = s0.substr(0, s0.find(' '));
std::string s2 = s0.rfind(' ') == std::string::npos ? "" : s0.substr(s0.rfind(' ') + 1);

ежели надо чтобы s1 == "" && s2 == s0
std::string s1 = s0.find(' ') == std::string::npos ? "" : s0.substr(0, s0.find(' '));
std::string s2 = s0.substr(s0.rfind(' ') + 1);
обе пустые?
std::string s1 = s0.find(' ') == std::string::npos ? "" : s0.substr(0,
s0.find(' '));
std::string s2 = s0.rfind(' ') == std::string::npos ? "" : s0.substr(s0.rfind(' ') + 1);
...
Рейтинг: 0 / 0
Сравнить два символа
    #33967728
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эстеткакой ужас!
это называется напиши так, что бы смотрелось как можно мерзопакостнее. только *** юниксоид мог зафигачить такой текстхмм... народ не знает, что юникод - это модно? Может, на никсах это не так модно, но на виндах это очень модно.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33967808
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blinded Akh blinded... Бога ... "Bjarne Stroustrup"; ....

Это только твое мнение.
Хорошо, я буду называть его Создатель, или и это будем опровергать?


Канэчна! Только если вы мне объясните связь Страуструба и sscanf, strchr,... .

На счет Бога, Страуструб уже сдал позиции. ;)
...
Рейтинг: 0 / 0
Сравнить два символа
    #33967837
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh blinded Akh blinded... Бога ... "Bjarne Stroustrup"; ....

Это только твое мнение.
Хорошо, я буду называть его Создатель, или и это будем опровергать?


Канэчна! Только если вы мне объясните связь Страуструба и sscanf, strchr,... .

На счет Бога, Страуструб уже сдал позиции. ;)

А кто сейчас Бог ??


По поводу бога впомнился мульт (аниме) "Лейн" (или "Эксперементы Лейн")
...
Рейтинг: 0 / 0
Сравнить два символа
    #33967911
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JibSkeart
А кто сейчас Бог ??

По поводу бога впомнился мульт (аниме) "Лейн" (или "Эксперементы Лейн")

Понятия не имею.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33967924
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blinded Akh[quot blinded]... Бога ... "Bjarne Stroustrup"; ....
А как надо?
std::string s1 = s0. find (' ') == std::string::npos ? "" : s0.substr(0,
s0. find (' '));
std::string s2 = s0. rfind (' ') == std::string::npos ? "" : s0.substr(s0. rfind (' ') + 1);
У вас явно слишком много find(), а введёте переменную и будет 1.
int pos = s0.find(' ');
if ( pos != -1){
s1 = s0.substr(0,pos-1);
s2 = s0.substr(pos+1);
}
...
Рейтинг: 0 / 0
Сравнить два символа
    #33968136
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedА у Бога лучше
std::string s0 = "Bjarne Stroustrup";
std::string s1 = s0.substr(0, s0.find(' '));
std::string s2 = s0.substr(s0.rfind(' ') + 1);

я не помню употребление std::string в "си++" страуструпа
...
Рейтинг: 0 / 0
Сравнить два символа
    #33968346
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну дык вспомни его в стандарте :)
...
Рейтинг: 0 / 0
Сравнить два символа
    #33969369
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikname blinded Akh[quot blinded]... Бога ... "Bjarne Stroustrup"; ....
А как надо?
std::string s1 = s0. find (' ') == std::string::npos ? "" : s0.substr(0,
s0. find (' '));
std::string s2 = s0. rfind (' ') == std::string::npos ? "" : s0.substr(s0. rfind (' ') + 1);
У вас явно слишком много find(), а введёте переменную и будет 1.
int pos = s0.find(' ');
if ( pos != -1){
s1 = s0.substr(0,pos-1);
s2 = s0.substr(pos+1);
}
Да не в количестве find дело, а втом что все уже укоадено до нас, и не следует изобретать велосипед и перебирать символы и вспоминать забытые типа strchr, strtok, strcat. Хотелось показать как можно это сделать стандартным, переносимым образом. да еще понятным для новичка. хотя и передернул немножко с rfind + 1 как и вы c -1 там всетаки как правило unsigned и лучше пользовать string::npos
и специально для Akh - откройте третье издание Язык программирования C++ глава 20 Строки
...
Рейтинг: 0 / 0
Сравнить два символа
    #33969452
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blinded
Да не в количестве find дело, а втом что все уже укоадено до нас, и не следует изобретать велосипед и перебирать символы и вспоминать забытые типа strchr, strtok, strcat. Хотелось показать как можно это сделать стандартным, переносимым образом. да еще понятным для новичка. хотя и передернул немножко с rfind + 1 как и вы c -1 там всетаки как правило unsigned и лучше пользовать string::npos
и специально для Akh - откройте третье издание Язык программирования C++ глава 20 Строки
На самом деле многое зависит от задачи и Юниксовый вариант симпатичен, если можно портить входной буфер. Функции CRT оптимизированы и я не удивлюсь, если они работают, на большом массиве, чуть быстрее, чем s.find()
...
Рейтинг: 0 / 0
Сравнить два символа
    #33969818
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blinded

Не могу отрыть, за не имением.

Специально для блиндеда - strtok более переносимо, чем ваш вариант. (Идем по стизе сикока? ;) )
...
Рейтинг: 0 / 0
Сравнить два символа
    #33969862
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ужосс !
все что можно перебрали из-за сравнения двух символов
еще подраться осталось :)
щутка конечна ...
...
Рейтинг: 0 / 0
Сравнить два символа
    #33970035
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JibSkeartУжосс !
все что можно перебрали из-за сравнения двух символов
еще подраться осталось :)
щутка конечна ...

Называется, от нехрен делеть. :)
...
Рейтинг: 0 / 0
Сравнить два символа
    #33970187
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh blinded

Не могу отрыть, за не имением.
http://anatolix.naumen.ru/Books/CPPProgLang?v=18kr
AkhСпециально для блиндеда - strtok более переносимо, чем ваш вариант. (Идем по стизе сикока? ;) )
Только она тоже буфер портит.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33970265
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blinded Akh blinded

Не могу отрыть, за не имением.
http://anatolix.naumen.ru/Books/CPPProgLang?v=18kr
AkhСпециально для блиндеда - strtok более переносимо, чем ваш вариант. (Идем по стизе сикока? ;) )
Только она тоже буфер портит.

Я так понимаю, ваш ответ утвердительный и в книжке это тоже написано?
...
Рейтинг: 0 / 0
Сравнить два символа
    #33970505
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ответ - да никакой. Делайте как хотите, просто что называется за державу обидно, никто не хочет пользовать возможности самого языка. А насчет переносимости в этом случае - ну ежели только для встроенных систем писать... Но это экзотика, по тойже приине не пользовать exception namespace RTTI ну и всю STL
...
Рейтинг: 0 / 0
Сравнить два символа
    #33971748
вопрозь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написал функцию
Код: plaintext
1.
2.
3.
4.
5.
int TfrmMain::Read(unsigned char Sector,AnsiString Data)
{
... 
     Data =_Data;//Здесь в Data есть значение
      return ResultReturn;
}
, вызываю её
Код: plaintext
1.
AnsiString Data;
Read( 13 , Data);

Значение теряется, хотя в самой функции оно есть, при передачи теряется. в чем ошибка?
...
Рейтинг: 0 / 0
Сравнить два символа
    #33971776
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или в ансистринг или в прочем коде
...
Рейтинг: 0 / 0
Сравнить два символа
    #33971786
вопрозь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklinили в ансистринг или в прочем коде
Код: plaintext
Data=_Data
Здесь при дебаге видно, что значение есть, а вот при вызове его уже нет
...
Рейтинг: 0 / 0
Сравнить два символа
    #33971890
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрозь Aklinили в ансистринг или в прочем коде
Код: plaintext
Data=_Data
Здесь при дебаге видно, что значение есть, а вот при вызове его уже нет

ансистринг?
...
Рейтинг: 0 / 0
Сравнить два символа
    #33971895
вопрозь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aklin вопрозь Aklinили в ансистринг или в прочем коде
Код: plaintext
Data=_Data
Здесь при дебаге видно, что значение есть, а вот при вызове его уже нет

ансистринг?
ДА
...
Рейтинг: 0 / 0
Сравнить два символа
    #33971943
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрозь Aklin вопрозь Aklinили в ансистринг или в прочем коде
Код: plaintext
Data=_Data
Здесь при дебаге видно, что значение есть, а вот при вызове его уже нет

ансистринг?
ДА

это вопрос или предложение.

я пытался сказать, что что-то в ансистринге, или в прочем коде.
...
Рейтинг: 0 / 0
Сравнить два символа
    #33972021
вопрозь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял! Переменная, которая передает данные объявлена в теле функции, поэтому после завершения работы функции она становится NULL
...
Рейтинг: 0 / 0
Сравнить два символа
    #33973111
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
strtok
...
Рейтинг: 0 / 0
98 сообщений из 98, показаны все 4 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сравнить два символа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]