поиск символа в массиве Char[]
От: Аноним  
Дата: 20.10.05 11:28
Оценка:
Привет всем, подскажите пожалуста, как в массиве char найти символ например “Y”(позицию в массиве);
Спасибо
Re: поиск символа в массиве Char[]
От: Аноним  
Дата: 20.10.05 11:31
Оценка:
И еще, подскажите пожалуйста ссылки по С++ на русскомм и легко читаемы. Если можно Страуструпа не давайте, он есть.
Re[2]: поиск символа в массиве Char[]
От: Bell Россия  
Дата: 20.10.05 11:37
Оценка:
Здравствуйте, Аноним, Вы писали:
Если имеем дело со строкой — strchr. Если с обыкновенным массивом — std::find, например.

А>...Если можно Страуструпа не давайте, он есть. Нет уж, никак нельзя — щас дадим
Любите книгу — источник знаний (с) М.Горький
Re[3]: поиск символа в массиве Char[]
От: Аноним  
Дата: 20.10.05 11:45
Оценка:
А примерчик?
Re: поиск символа в массиве Char[]
От: Lexey Россия  
Дата: 20.10.05 12:36
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Привет всем, подскажите пожалуста, как в массиве char найти символ например “Y”(позицию в массиве);


memchr или strchr, если массив нуль-терминирован.
... << RSDN@Home 1.1.4 stable rev. 510>>
"Будь достоин победы" (c) 8th Wizard's rule.
Re[4]: поиск символа в массиве Char[]
От: sadomovalex Россия http://sadomovalex.blogspot.com
Дата: 20.10.05 12:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А примерчик?


char c[] = {'a', 'b', 'c'};
char* p = std::find(c, c + 3, 'b');
"Что не завершено, не сделано вовсе" Гаусс
Re[3]: поиск символа в массиве Char[]
От: gear nuke  
Дата: 20.10.05 21:10
Оценка:
Здравствуйте, Bell, Вы писали:

B>Если имеем дело со строкой — strchr. Если с обыкновенным массивом — std::find, например.


Не то найдёт:

как в массиве char найти символ например “Y”(позицию в массиве);


    char foo[] = "QWERTYUIOPASDFGHJKLZXCVBNM";
    int pos = -1; // символ не найден
    for ( int i = 0; i < sizeof(foo); i++ )
        if ( foo[i] == 'Y' )
        {
            pos = i;
            break;
        }
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[4]: поиск символа в массиве Char[]
От: Phoenickx  
Дата: 21.10.05 13:06
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, Bell, Вы писали:


B>>Если имеем дело со строкой — strchr. Если с обыкновенным массивом — std::find, например.


GN>Не то найдёт


А что именно не то найдет?
Re[5]: поиск символа в массиве Char[]
От: gear nuke  
Дата: 21.10.05 13:25
Оценка:
Здравствуйте, Phoenickx, Вы писали:

P>А что именно не то найдет?


strchr returns a pointer to the first occurrence of c in str, or NULL if c is not found.
А нужен индекс в массиве.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[6]: поиск символа в массиве Char[]
От: Аноним  
Дата: 21.10.05 13:34
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, Phoenickx, Вы писали:


P>>А что именно не то найдет?


GN>strchr returns a pointer to the first occurrence of c in str, or NULL if c is not found.

GN>А нужен индекс в массиве.

Вы щас человека научите на С программировать в стиле бейска. Ищется указатель, а потом вычисляется разность между найденным значением (если оно не NULL) и адресом массива. Это и будет позиция. Если надо 1-based, то прибавить потом 1.
Re[7]: поиск символа в массиве Char[]
От: gear nuke  
Дата: 21.10.05 14:37
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Вы щас человека научите на С программировать в стиле бейска.


ИМХО стиль бейсика — вызывать где ни попадя библиотечные функции, смысл которых остаётся за кадром.
Я же показал как и почему работает поиск.

А>Ищется указатель, а потом вычисляется разность между найденным значением (если оно не NULL) и адресом массива. Это и будет позиция. Если надо 1-based, то прибавить потом 1.


На x86 это требует лишнюю операцию. Компиляторы это скорее всего нивелируют, но если раелизовать на асме, мой способ компактнее .
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[8]: поиск символа в массиве Char[]
От: Аноним  
Дата: 21.10.05 14:45
Оценка:
GN>На x86 это требует лишнюю операцию. Компиляторы это скорее всего нивелируют, но если раелизовать на асме, мой способ компактнее .

Вообще-то, здесь речь не об асме, а о С++. И на каком именно acme? В x86 есть команда scasb, которая вместе с префиксом rep вообще весь этот поиск реализует. (Правда не факт, что в пентюхах scasb будет рабтать быстрее цикла).
Re[9]: поиск символа в массиве Char[]
От: gear nuke  
Дата: 21.10.05 15:17
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Вообще-то, здесь речь не об асме, а о С++.


Не я первый поднял вопрос о других языках .

А>И на каком именно acme? В x86 есть команда scasb, которая вместе с префиксом rep вообще весь этот поиск реализует.


rep scasb в этой задаче использовать не получится.

А>(Правда не факт, что в пентюхах scasb будет рабтать быстрее цикла).


Хорошее замечание, только забыли, что пеньтюхов много разных бывает .
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[10]: поиск символа в массиве Char[]
От: Аноним  
Дата: 21.10.05 15:19
Оценка:
GN>rep scasb в этой задаче использовать не получится.


Почему не получится ?
Re[11]: поиск символа в массиве Char[]
От: gear nuke  
Дата: 21.10.05 16:10
Оценка:
Здравствуйте, <Аноним>, Вы писали:

GN>>rep scasb в этой задаче использовать не получится.


А>Почему не получится ?


Что загружать в ecx?
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[12]: поиск символа в массиве Char[]
От: Аноним  
Дата: 21.10.05 16:22
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, <Аноним>, Вы писали:


GN>>>rep scasb в этой задаче использовать не получится.


А>>Почему не получится ?


GN>Что загружать в ecx?


да, согласен. Паскаль рулит (в смысле хранение длины строки в ее начале)
Re[13]: поиск символа в массиве Char[]
От: Аноним  
Дата: 21.10.05 16:24
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, gear nuke, Вы писали:


GN>>Здравствуйте, <Аноним>, Вы писали:


GN>>>>rep scasb в этой задаче использовать не получится.


А>>>Почему не получится ?


GN>>Что загружать в ecx?


А>да, согласен. Паскаль рулит (в смысле хранение длины строки в ее начале)


Хотя может и не согласен. Изначально спрашивали про поиск в массиве, а не в строке. А размер массива очевидно известен, его в ecx и загрузим
Re[13]: поиск символа в массиве Char[]
От: gear nuke  
Дата: 21.10.05 17:15
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Паскаль рулит (в смысле хранение длины строки в ее начале)


Отец Паскаля уже так не считает .

Component Pascal Language Report:

6.6 String Types

Values of a string type are sequences of characters terminated by a null character (0X). The length of a string is the number of characters it contains excluding the null character.
Strings are either constants or stored in an array of character type. There are no predeclared identifiers for string types because there is no need to use them in a declaration.
Constant strings which consist solely of characters in the range 0X..0FFX and strings stored in an array of SHORTCHAR are of type Shortstring, all others are of type String.

(стандартный CHAR двубайтный)

В общем-то логично — приходится иметь дело с API требующими 0 в конце строки. В одном проекте мне пришлось использовать fucked string, как раз по этой причине . Хотя длина хранится из других соображений — используется как в некотором роде хэш.

P.S. Строчки до сих пор остаются слабым звеном всего ПО — только что копировал 200 строк из таблицы OpenOffice в Janus — ждал 2 секунды
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[14]: поиск символа в массиве Char[]
От: gear nuke  
Дата: 21.10.05 17:20
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Хотя может и не согласен. Изначально спрашивали про поиск в массиве, а не в строке. А размер массива очевидно известен, его в ecx и загрузим


Ну вот видите — как легко запутать простыми строчками даже опытного человека . Так что ИМХО всё же лучше начинать изучение строчек руками, безо всяких функций, тогда и для конкретной жизненной задачи можно будет найти оптимальное решение.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.