我正在尝试删除前导空格并将字符存储在空格之后。我不希望新行被视为
这是我正在阅读的文件:
Map: Out of planet
Player: Max
我的预期结果和我要找的应该是
cout << kill.killMap << endl;
Out of planet // NOTICE THERE IS NO WHITESPACE
cout << kill.player << endl;
Max // NOTICE THERE IS NO WHITESPACE
如果文件看起来像这样......
Map:
Player: Max
map
变量和player
变量中不应存储任何内容。
虽然ws函数从流中删除了空格,但我不认为它对char数组有同样的作用。如果有人能告诉我一种让ws工作的方法,或者只是一种有效的方法来删除空白,我真的很感激
这就是我得到的:
cout << kill.killMap << endl;
Out of planet //THERE IS WHITESPACE
cout << kill.player << endl;
Max //THERE IS WHITESPACE
有没有办法在不使用C ++字符串或向量的情况下执行此操作。我打算使用C Style字符串
这是我的编辑代码,但如果在分包者之后有效字符:
,它就不会工作......如果有人可以修复我的代码,那将真的很有意义,对我来说意义重大。< / p>
istreams.get(characters, 50, ':');
istreams.get(c);
istreams.getline(kill.killMap, 35);
while ((is.get(c) != "\n") && (is.get(c) != '\0') )
{
is >> ws;
}
is.getline(kill.killMap, DATA_FILE_SIZE);
if(kill.killMap[0] = '\0)
{
cout << "Error;
break;
}
istreams >> ws;
istreams.get(characters, 50, ':');
istreams.get(c);
while ((is.get(c) != "\n") && (is.get(c) != '\0') )
{
is >> ws;
}
istreams.getline(kill.player, 35);
if(kill.player[0] = '\0)
{
cout << "Error;
break;
}
答案 0 :(得分:0)
您可以这样做:
void eatwhites(istream& stream)
{
const string skip=" \t";//put here all wanted skip chars (here i put only SPACE and TAB
while(string::npos != skip.find(stream.peek())){ //if next char in stream exist in skip string
stream.ignore();//then ignore it (1 character).
}
}
修改的
以下是我测试它的方式,它对我有用:
请注意,您在阅读后仍需修剪字符串,意味着将'\0'
放在最后一个非白色字符后。
如果出现问题,你可以告诉它输入了什么以及你得到了什么。
int main()
{
string s1,s2;
eatwhites(cin);
getline(cin,s1, ':');//read until ":"
eatwhites(cin);
getline(cin,s2); //read until "\n"
cout<<"'"<<s1<<"':'"<<s2<<"'"<<endl;
return 0;
}
输入我已尝试过:
<强> EDIT2:强>
使用char
数组,它可以像以下一样使用:
#define MAX_FIELD 128
int main()
{
char s1[MAX_FIELD],s2[MAX_FIELD];
eatwhites(cin);
cin.getline(s1, MAX_FIELD, ':');
eatwhites(cin);
cin.getline(s2, MAX_FIELD);
cout<<"'"<<s1<<"':'"<<s2<<"'"<<endl;
return 0;
}
相同输入的结果相同。