Switch case với chuỗi kí tự trong C

Các Cao nhân cho em hỏi làm sao để dùng switch case với chuỗi kí tự trong C được không ạ? Em chỉ mới biết switch với số và với 1 kí tự thôi ạ. search trên Stackoverflow có vài cái mà chả hiểu tí gì. Mong các anh chỉ dạy.

Hình như là không có??

switch - case chỉ dùng cho kiểu số nguyên và kiểu kí tự thôi bạn( thật ra là chỉ dùng cho kiểu số nguyên vì kiểu kí tự cũng là 1 kiểu số nguyên).

Theo ngu ý của em thì xài switch lồng được không anh :v

switch lồng thì code dài cả cây số bạn à :joy: :joy:

1 Like

Ngu kiến mà anh =)) nhưng ít ra là nó vẫn làm được với trường hợp của thớt =))

1 Like

http://stackoverflow.com/questions/4014827/best-way-to-switch-on-a-string-in-c ai giải thích hộ mình những cái này được không? rắc rối quá

1 Like

Ý của người ta là dùng nhiều lệnh if else thay vì dùng switch case đó :grin:

2 Likes

có mấy cái khác dừn hàm riêng mà bạn

Hàm đó là so sánh 2 chuỗi :smiley:
return 0 chứng tỏ 2 string giống nhau.
http://www.cplusplus.com/reference/cstring/strcmp/

1 Like

Dùng if, else và hàm so sánh chuỗi là cách dễ nhất, vì switch case hay if else gì khi biên dịch thành mã máy thì cũng ra một đống asm là cmp, jmp… mà thôi.

#include <iostream>
using namespace std;
void Case1()
{
	cout << "Case 234" << endl;
}
void Case2()
{
	cout << "Case 123" << endl;
}
bool Compare(const char* left, const char* right)
{
	return strcmp(left, right);
}
int main()
{
	char* testValue = "123";
	
	if (Compare(testValue, "234"))
	{
		Case1();
	}
	else if (Compare(testValue, "123"))
	{
		Case2();
	}
	cin.get();
	return 0;
}

Thời bây giờ đã có bảng băm (hash table) rồi, có thể áp dụng kiểu này(nếu bạn lên C++): :smile:
Con trỏ hàm: http://diendan.congdongcviet.com/threads/t25204::con-tro-ham-trong-c-cpp-function-pointer.cpp
Bảng băm: http://www.cplusplus.com/reference/unordered_map/unordered_map/

#include <iostream>
#include <unordered_map>
using namespace std;
typedef void(*Function)(void);
void Case1()
{
	cout << "Case abc" << endl;
}
void Case2()
{
	cout << "Case def" << endl;
}
int main()
{
	unordered_map<string, Function> SwitchCase;
	SwitchCase.emplace("abc", Case1); // nếu chuỗi là abc thì chạy Case1
	SwitchCase.emplace("def", Case2); // nếu chuỗi là def thì chạy Case2

	string testValue1 = "abc";
	string testValue2 = "def";

	SwitchCase[testValue2](); // kiểm tra cho def
	SwitchCase[testValue1](); // kiểm tra cho abc

	cin.get();
	return 0;
}
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?