【发布时间】:2017-08-30 09:06:55
【问题描述】:
我需要为一个Stern (engl.: Star) 对象从一个如下所示的文本文件中读取所有属性。我需要用"" 替换字符串"leer",但也可以有一个不应替换为"" 的有效字符串。
即,对于另一个 Stern 对象,也可能是 "leer" 而不是 "Sol"。
问题:
问题是它不会用"" 替换"leer"。似乎它在对象中保存了"leer\\r",而不仅仅是"leer",但我也尝试替换"leer\\r",但它仍然不起作用。
这是文本文件中应阅读的Stern:
0
Sol
0.000005
0.000000
0.000000
leer
1
0
这是我的operator >> 来阅读它:
istream& operator>>(istream& is, Stern& obj)
{
string dummy;
is >> obj.m_ID;
getline(is, dummy);
getline(is, obj.m_Bez);
if (obj.m_Bez == "leer")
obj.m_Bez = "";
is >> obj.m_xKoord >> obj.m_yKoord >> obj.m_zKoord;
getline(is,dummy);
getline(is,obj.m_Sternbild);
if (obj.m_Sternbild == "leer")
obj.m_Sternbild = "";
is >> obj.m_Index >> obj.m_PrimID;
return is;
}
船尾.h:
#ifndef STERN_H
#define STERN_H
#include <string>
#include <iostream>
using namespace std;
class Stern
{
public:
Stern();
// 2.a)
//Stern(int m_ID, string m_Bez, float m_xKoord, float m_yKoord, float m_zKoord, string m_Sternbild, int m_Index, int m_PrimID);
virtual ~Stern();
void print() const; // 1.b)
friend ostream& operator<<(ostream& os, const Stern& obj); // 1.b)i.
friend istream& operator>>(istream& is, Stern& obj);
private:
int m_ID;
string m_Bez;
float m_xKoord;
float m_yKoord;
float m_zKoord;
string m_Sternbild;
int m_Index;
int m_PrimID;
};
#endif /* STERN_H */
【问题讨论】:
-
你显示的代码有什么问题?
-
问题是它没有用“”替换“leer”而且它似乎在对象中保存了“leer\\r”而不是只保存了“leer”,但我试图替换"leer\\r" 也一样,还是不行。
-
如果输入与您的描述中的输入相同,那么我猜这是因为“leer”字之前的空格?不要忘记您正在使用
getline(is, obj.m_Bez);并且不会删除空格。尝试先修剪字符串,然后检查是否相等。 -
保存的确切值是: m_ID: 0 m_Bez: "Sol\\r" m_xKoord:4.99999987e-06
-
如果您在调试器中逐行执行代码,您会注意到什么?您读取的值是否正确,是否符合您的预期?