if(strcmp(my_string, "string1") == 0)
{
}
else if(strcmp(my_string, "string2") == 0)
{
}
...
else
{
}
правда это в случаях, когда константных строк мало. иначе лучше всего воспользоваться регулярными выражениями или построить двоичное дерево константных строк.
Я один раз видел такой код:
switch (*mystring)
{
case 'aa':...
case 'ab':...
}
Но это, скорее, из разряда анекдотов.
P.S. Разумеется, mystring не char *. В противном случае преобразование типов.
Возможна, если в my_string находится именно тот "string1", что описан в case. Почти все компиляторы не дублируют строковые константы, поэтому если у них совпадает значение, будет совпадать и адрес. Но если my_string получается откуда-то ещё (strdup, ввод с клавиатуры, кусок другой строки), а не напрямую из константы *my_string = "string1";, то такой код работать не будет.
Я чего то не пойму. У вас другой C что ли? Вообще то switch-case-ом можно сравнивать только int-ы, и всё, что к нему неявно приводится. Указатели к int-у неявно не приводятся.
> Вообще то switch-case-ом можно сравнивать только int-ы, и всё, что к нему неявно приводится.
Это называется перечисляемые типы. Т.е. любые типы для которых можно для любых двух элементов сказать, что один больше другого. Но в данном примере будут сравниваться указатели.