문자의 ctype 식별을 텍스트 표현에 매핑하는 프로그램이 있습니다. std::map
을 사용하여 마스크 값 (ctype_base::mask
)을 문자열의 문자 유형을 나타내는 문자열에 매핑합니다. 내가 가지고있는 문제는 그 값을 인쇄하려고 시도 할 때 아무것도 출력되지 않는다는 것입니다. 왜 이런거야?지도에서 문자 분류 정보를 가져 오는 중 문제가 발생했습니다.
#include <iostream>
#include <map>
#include <vector>
class mask_attribute
{
private:
typedef std::ctype_base base_type;
public:
mask_attribute()
{
mask_names[base_type::space] = "space";
mask_names[base_type::alpha] = "alpha";
mask_names[base_type::digit] = "digit";
}
std::string get_mask_name(base_type::mask mask) const
{
std::string result = (*mask_names.find(mask)).second;
return result;
}
private:
std::map<base_type::mask, std::string> mask_names;
};
int main()
{
std::string a = "abc123";
std::vector<std::ctype_base::mask> v(a.size());
auto& f = std::use_facet<std::ctype<char>>(std::locale());
f.is(&a[0], &a[0] + a.size(), &v[0]);
for (unsigned i = 0; i < v.size(); ++i)
std::cout << mask_attribute().get_mask_name(v[i]) << std::endl;
}
내가 예상 출력했다 :
,
alpha
alpha
alpha
digit
digit
digit
대신 아무 것도 인쇄되지 않습니다. 여기서 내가 뭘 잘못했는데 어떻게 수정해야합니까?
[cppreference 예제] (http://en.cppreference.com/w/cpp/locale/ctype/is)에서 'ctype :: is'로 채워진 벡터에서 분류 정보가 어떻게 추출되는지 주목하십시오. – Cubbi