switch в C++
А во вторых ты хоть представляешь как case работает? Он на этапе компиляции занимается выстраиванием дерева из условных операторов.
типа вычислили выражение после switch и поехали сравнивать результат.
btw, ну и что, что дерево? что мешает сделать "дерево" для std::string?
короче, так правильно. он и не должен работать.
#include <stdio.h>
int main
{
double a = 3.2;
switch (a)
{
case 1.: printf("false\n"); break;
case 3.2: printf("true\n"); break;
default: printf("defau\n"); break;
}
return 0;
}
а вот тут что мешает сделать дерево? %)
Вопрос остается все-таки в силе. Как же мне сравнить эти несколько строчек с одной именно при помощи этого оператора?
которая реализует алгоритм поиска первого совпадения (или всех совпадений) с искомой подстрокой.
там за O(n) можно, как настоящий switch (правда n — число символов ).
в соседнем треде была с числами немного похожая задача.
никак. Этот оператор не предназначен для подобных проверок. Разумеется, ты всегда можешь извратиться и придумать несколько способов, формально удовлетворяющих требованию (чтобы и switch использовался, и работало все но ни малейшей пользы в этом нет.
но почему-то не работает при типе stringА в Си тип string - это строка, или указатель на первый из последовательности байт?
Если второе - ничего удивительного, что у тебя switch не работает...
И комп почему-то выдает ошибку.Помогите! Я написал какую-то программу, что-то с ней сделал, и комп почему-то выдаёт какую-то ошибку! Что делать?
а вот тут что мешает сделать дерево? %)Помимо построения дерева switch ещё умеет делать массив из указателей по опр/ значениям, когда видит подряд идущие значения.
Короче, только целый может быть параметр, а в кейсах вообще переменных быть не должно.
Всем остальным: блядь, ну и раздел. Задашь какой-нибудь вопрос, никто почти ничего конкретного не отвечет, зато почти всегда находятся люди, которые начинают общаться между собой хер знает на какую тему, поклав здоровенный баклажан на то, что спрашивали. Только, блядь, тред загаживают. Причем не только со мной. И нахуя так делать. Еще и острить пытаются вопросами в духе "ты вообще хоть знаешь, о чем говоришь" и т.д. и т.п. .
В C++ так сделать нельзя, хотя это и глупо (уповаем на C++09). Если очень надо, считай от строки хэш типа int.
А в Си тип string - это строка, или указатель на первый из последовательности байт?А зачем отвечать в теме, в которой ты не разбираешься? В Си++ тип std::string - это класс. А switch у нас работает только с целыми типами или с теми, у которых определён оператор преобразования.
деревья сосут, хэш быстрее будет.
на этот раз — да, зато у дерева больше фич! %)
если и про строки что-то известно то можно подобрать очень эффективный хэш.
потому что сравнивать два вещественных числа на равенство - по крайней мере неблагоразумно.
можно вшить в процессор операцию "сравнить два вещественных числа на предмет равенства с точностью ε", где ε берется из какого-нибудь регистра
зачем нужен , если его разумное значение вычисляется из сравниваемых чисел?
для продавца разумное ε одно, для метролога - другое
всё равно крутизну деревьев нельзя отрицать!
6.4.2
- 2 The condition shall beof integral type, enumeration type, or of a class type for whitch a single conversion function to integral or enumeration type exists.
короче, про double — это был риторический вопрос. =)
Оставить комментарий
zrab
Знаю, что вопрос тупой, но инет сейчас вырублен, а разобраться надо. Оператор switch работает, если бы s1, s2, s3 были бы типа int, но почему-то не работает при типе string. В чем дело, скажите, плз. .И комп почему-то выдает ошибку. Что такое?