1
작은 프로그램이 있는데,지도에서 특정 문자열을 검색하려고합니다. 정적 const 문자열 "find"를 전달하면 정확한 결과를 얻지 만 그렇지 않습니다. 문자열을 포인터로 복사하면 작동합니다. 나는 어떻게 전달 된 문자열의 주소를 비교하려고 시도하고 있다고 생각합니다. 어떤 이유로 인해 std :: string 제거 할 계획입니다.const char *지도에서 찾지 못함
using namespace std;
static struct MarketLang {
const char* market;
const char* lang;
} market_lang[] = {
{"us", "all"},
{"el", "en,fr,it,de,es"},
{"xx", "na"},
};
class MarketLangMap {
map<const char*, MarketLang *> table;
public:
MarketLangMap() {
int TOTAL_MARKET_INFO = sizeof(market_lang)/sizeof(MarketLang);
for (int i = 0; i < TOTAL_MARKET_INFO; i++) {
table[market_lang[i].market] = market_lang+ i;
}
}
MarketLang *operator[](const char* s) {
if (table.find(s) != table.end()) {
return table.find(s)->second;
} else {
return table.find("xx")->second;
}
}
};
int
main()
{
MarketLangMap *m = new MarketLangMap();
const char* r = "us";
char* p = new char(10);
strcpy(p, "us");
std::cout<<(*m)["us"]->lang <<std::endl;``
std::cout<<(*m)[r]->lang <<std::endl;
std::cout<<(*m)[p]->lang <<std::endl;
}
예상 출력 : 모든 모든 모든
여기서 코드
실제 출력 입력 모든 모든 의해 NA
당신은 표준을 사용하려면 : 문자열이 아닌 char * const는 두 문자열을 올바르게 비교합니다 (즉,보다 작음 연산자를 구현합니다). 반면 후자는 문자열 자체가 아닌 포인터를 비교합니다. –
또는 키를 비교할 수있는 [std :: map] (http://www.cplusplus.com/reference/map/map/)의 세 번째 템플릿 매개 변수로 자신의 이진 조건자를 제공 할 수 있습니다. –
동의하지만 std :: string없이 수행 할 수있는 방법이 있습니까? C 세계에서 어떻게 이루어 졌습니까 (저는지도가 C 세계에 없다는 것을 알고 있습니다)? – Jazz