C++;如何读取txt文件并检索除字符串以外的数值(反之亦然) 我一直在自学C++,并在寻找如何做到这一点。让我举个例子来说明我的意图
这是一个txt文件,内容如下C++;如何读取txt文件并检索除字符串以外的数值(反之亦然) 我一直在自学C++,并在寻找如何做到这一点。让我举个例子来说明我的意图,c++,fstream,ifstream,C++,Fstream,Ifstream,这是一个txt文件,内容如下 Matt 18 180.0 88.5 Angela 20 155.5 42.2 每一行都有关于一个人的姓名、年龄、身高和体重的信息 我一直试图做的是分别获取这4种类型的信息,并根据信息类型将它们存储在不同的变量中 vector<string> name; //"Matt" or "Angela" are stored here. vector<int> age; //18 or 20 vector<double>
Matt 18 180.0 88.5
Angela 20 155.5 42.2
每一行都有关于一个人的姓名、年龄、身高和体重的信息
我一直试图做的是分别获取这4种类型的信息,并根据信息类型将它们存储在不同的变量中
vector<string> name; //"Matt" or "Angela" are stored here.
vector<int> age; //18 or 20
vector<double> height; //The same logic goes for this vector and the next one
vector<double> weight;
向量名//“马特”或“安吉拉”存储在这里。
媒介年龄//18或20岁
矢量高度//同样的逻辑适用于这个向量和下一个向量
向量权重;
至少我发现,通过使用ifstreamObject.open(filename.c_str())
和getline(ifstreamObject,string)
,txt文件中的信息可以存储在字符串变量中。然而,通过使用这个方法,我只能得到对应于每一行的字符串值。换句话说,我无法区分字符串值和数值
很可能没有其他方法从txt文件中获取信息。尽管如此,以防万一,在我放弃之前,我想在这里就如何以这种方式获取信息征求一些建议
任何建议都将不胜感激。如果您知道每个条目之间有一个特定的字符(如制表符),您可以使用String.find_first_和substring将字符串划分为多个片段,并将其解析为您拥有的字段。
检查更多信息您好,您可以使用stl::string方法操作行字符串,以分别提取这4种类型的信息 用于查找每个空白字符的开头,并用于查找每个非空白字符。用于从行字符串中提取子字符串。还可以使用
atoi
将字符串值转换为int
比如说,
//rowSrting保存文件中一行的数据
std::size_t nameEnd = rowString.find_first_of(" ");
string name = rowString.substr(0, nameEnd-1);
std::size_t ageFirst = rowString.find_first_not_of(" ", nameEnd);
std::size_t ageEnd = rowString.find_first_of(" ", ageFirst );
int age = atoi(rowString.substr(ageFirst, ageEnd-1));
您可以直接使用流
std::string name;
int age;
double height, weight;
while(ifstreamObject >> name >> age >> height >> weight)
{
// process name, age, height and weight
}
缺点是流插入操作符将一直读取到第一个空格。因此,如果要将整行作为字符串读取,则使用getline
,相应地处理该字符串,“映射”将getline
读取的字符串返回到istringstream
std::istringstream is(str); // constructs an istringstream from the string str
然后使用
与使用流类似。非常感谢。我能再问一个问题吗?>
操作符显然根据是否有空格来分隔每个字符串块(在上面的示例中,每个字符串块可以是“Matt”、“18”、“180.0”等等)。我还认为我需要在>
之间放置一个变量名,以便检测每个字符串块。我说得对吗?谷歌搜索c++ifstream>>操作符
显示与c++istream>>操作符
相关的结果,而不是ifstream
@YMD是的,这是正确的。提取运算符继承自istream
(它是ifstream
的基类)。