在我的实验室中,我正在尝试处理代表地球上目的地的线。这方面的一个例子是....
“152 / N 200 / E California Ave”
在我教授的笔记中,他说如果你这样做了......
std::cin >> latitude >> latitudeDirection >> longitude >> longitudeDirection >> address
它一直消耗到加利福尼亚州,从那里开始,每个空白处一次消耗一个字符串。我该怎么做才能消耗其余的输入?以下是我的变量在分配时的外观......
latitude = 152
latitudeDirection = "/N"
longitude = 200
longitudeDirection = "/E"
address = "California"
地址仅在我想要“加州大道”时才举行“加利福尼亚”。这是我到目前为止的代码。
int numberOfLocations;
std::cin >> numberOfLocations;
std::cin.ignore();
for (int x = 0; x < numberOfLocations; x++) {
double longitude, latitude;
std::string longitudeDirection, latitudeDirection, address;
/*
std::cin >> latitude >> latitudeDirection >> longitude >> longitudeDirection >> address;
std::cout << latitude << latitudeDirection << latitude << latitudeDirection << address << std::endl;
*/
}
答案 0 :(得分:2)
普通>>
作为输入运算符将输入拆分为由空格分隔的“单词”。
为避免这种情况,请考虑每行输入一个项目。您可以使用std::getline
中的<string>
来读取一行。如果您需要一个号码,您可以使用例如std::stoi
。
如果您别无选择,只能处理包含多个输入项的字符串,最后可能包含空格的文本数据,那么您可以使用来读取文本前的项目
示例1 - 每行读取一个项目:
#include <iostream>
#include <stdlib.h> // exit, EXIT_FAILURE
#include <string> // std::string
using namespace std;
void error( string const& s )
{
cerr << "!" << s << endl;
exit( EXIT_FAILURE );
}
auto get_input_line()
-> string
{
string line;
getline( cin, line );
if( cin.fail() ) { error( "Uh oh, ..." ); }
return line;
}
auto main() -> int
{
cout << "This program adds two numbers A and B." << endl;
cout << "Number A, please? ";
double const a = stod( get_input_line() );
cout << "Number B, please? ";
double const b = stod( get_input_line() );
cout << a << " + " << b << " = " << a + b << "." << endl;
}
示例2 - 解析一行文本
(恕我直言并不聪明,但也许是一项要求)
#include <iostream>
#include <stdlib.h> // exit, EXIT_FAILURE
#include <string> // std::string
#include <sstream> // std::istrstream
using namespace std;
void error( string const& s )
{
cerr << "!" << s << endl;
exit( EXIT_FAILURE );
}
auto main() -> int
{
string const data = "152/N 200/E California Ave";
cout << "This program parses the line '" << data << "'." << endl;
cout << endl;
cout << "Result:" << endl;
istringstream stream( data );
char dummy_char;
int latitude;
char latitudeDirection;
int longitude;
char longitudeDirection;
string address;
stream
>> latitude >> dummy_char >> latitudeDirection
>> longitude >> dummy_char >> longitudeDirection;
if( stream.fail() ) { error( "Initial items extraction failed." ); }
while( stream.peek() == ' ' ) { stream.get(); }
getline( stream, address );
cout << "> "
<< latitude << "/" << latitudeDirection << " "
<< longitude << "/" << longitudeDirection << " "
<< "'" << address << "'"
<< "<" << endl;
}
答案 1 :(得分:0)
这里的问题是,你试图输入带空格的字符串,因此,由于cin的输入由空格''分隔,你将不得不使用std :: getline,这将使输入范围的结束为新队。 示例实施:
#include <iostream>
using namespace std;
int main()
{
string s;
getline(cin,s);
cout<<s;
return 0;
}
用这个你可以输入带空格的字符串。 (字符串的结尾将在用户按下的n输入之后,字符串分隔符的结尾为换行符)