나는 그것이 변수는 숫자, 배열 또는 문자열로 다른 유형을 가질 수있는 질문에 암시 생각합니다. 또한
struct Var
{
enum { Double, String, Array } Type;
Type type_;
double double_;
std::string string_;
std::vector<double> array_;
Var(Type t) : type_(t), double_(0) { } // empty double/string/array
Var(double d) : type_(Double), double_(d) { }
Var(const std::string& s) : type_(String), string_(s) { }
...
};
, 당신은 C++의 붙박이 다형성 사용할 수 있으며, 각각의 실제에 대한 기본 클래스와 파생 클래스가 :이 경우에는 사용 boost::any<>
또는 boost::variant<>
을 말하거나 자신의 변수 유형 람을 만들지 여부를 결정해야합니다 세계 데이터 유형. 항상 텍스트 표현을 저장하고 모든 것을 std::string
에 저장하는 것으로 충분할 수도 있습니다. 그러나 당신은 그것을합니다, 당신이 "Type"이라는 타입의 값을 저장한다고 가정 해 봅시다.
변수의 이름은 콜론의 왼쪽에 지정해야합니다. 해당 변수가 프로그램에서 하드 코딩되어 있음을 알고 있으면 기존 변수를 오른쪽 값으로 설정할 수 있습니다. 그렇지 않으면 식별자 이름과 연결된 변수를 동적으로 만들어야합니다. 식별자를 사용하여 std::map<std::string, Type>
키를 입력하면됩니다. 다음과 같이 채울 수 있습니다.
std::map<std::string, Type> variables;
variables["age"] = Type(28);
variables["name"] = Type("Fred");
실제 텍스트 파일을 구문 분석 할 때 iostream을 사용할 수 있습니다. 한 번 람에 한 줄을 읽어
std::string line;
while (getline(cin, line))
{
std::string::pos n = line.find(':');
if (pos != std::string::npos)
{
std::string identifier = line.substr(0, n - 1);
Type var;
{
// try parsing it as a number...
std::istringstream iss = line.substr(n + 1);
char c;
double d;
if (iss >> d && !(iss >> c))
var = d;
}
{
// try parsing it as an array...
std::istringstream iss = line.substr(n + 1);
var.clear(Array);
double d;
if (iss >> c && c == '[')
while (iss >> d)
result.array_.push_back(d);
if (iss && iss >> c && c == ']' && !(is >> c))
// parsed successfully as an array - use "result"
}
{
// it's a string...
var = line.substr(n + 1);
}
당신이에 시작하고 문제가 발생할 구체적인 도움을 요청하려고한다
.
참고 : Ruby, python 또는 perl과 같은 언어로이 요구 사항을 충족하는 작동하는 (느리지 만) 프로그램을 쉽게 얻을 수 있습니다.
무엇이 문제입니까? 아직 코드가 있습니까? 왜 실패 하는가? –
더 자세히 알려면 coz 파일에 변수를 쓰는 것이 두 줄로하기 쉽습니다! – Sudantha
'.txt' 파일에 대한 제약이 있습니까? 아니면 형식을 자유롭게 변경할 수 있습니까? – ereOn