30/09/2018, 18:08

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.

hacked viết 20:22 ngày 30/09/2018

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

Ngo Dinh Quyen viết 20:10 ngày 30/09/2018

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).

Nguyễn Hoàng Trung viết 20:24 ngày 30/09/2018

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

Đặng Xuân Thành viết 20:20 ngày 30/09/2018

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

Nguyễn Hoàng Trung viết 20:21 ngày 30/09/2018

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 =))

Đặng Xuân Thành viết 20:19 ngày 30/09/2018

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á

TTmagic viết 20:24 ngày 30/09/2018

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

Đặng Xuân Thành viết 20:16 ngày 30/09/2018

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

TTmagic viết 20:23 ngày 30/09/2018

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

明玉 viết 20:15 ngày 30/09/2018

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++):
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;
}
Bài liên quan
0