C++ 从文件的单行读取输入字符
所以我的任务是从文件中读取一行 例如: 并将其逐个输入字符串变量C++ 从文件的单行读取输入字符,c++,inputstream,C++,Inputstream,所以我的任务是从文件中读取一行 例如: 并将其逐个输入字符串变量 一个问题是数字和符号之间有0个或多个空格,但一个数字和另一个数字之间至少有1个空格。那么如何区分每个数字/符号呢?我建议您通过getline()读取整行内容,然后按字符顺序解析字符串,并可能构建另一个字符串 cin.getline( myString ); for ( int i = 0; i < myString.size(); i++ ) { if ( myString[i] != ' ' ) { if (
一个问题是数字和符号之间有0个或多个空格,但一个数字和另一个数字之间至少有1个空格。那么如何区分每个数字/符号呢?我建议您通过getline()读取整行内容,然后按字符顺序解析字符串,并可能构建另一个字符串
cin.getline( myString );
for ( int i = 0; i < myString.size(); i++ ) {
if ( myString[i] != ' ' ) {
if ( myString[i] >= '0' && myString[i] <= '9' {
// do something with numbers;
} else {
// do something with characters.
}
}
}
cin.getline(myString);
对于(int i=0;i='0'&&myString[i]>std::noskipws;//需要识别行尾字符。
而(cin>>ch&&ch!='\n'){
如果(ch!=''){
如果(ch>='0'&&ch>std::skipws;
在C++中,你可以用<代码> GETLIN()/CUT>读取整行到字符串。现在String支持<代码> FordPixSTyOf()/<代码>和<代码> FordPixSTyNoToOx()/Script >,允许有效地读取空白直到跳过它。
未测试:
string delims = " \t"
getline(file, line);
int tokenStart, tokenEnd = 0;
string token;
tokenStart = line.find_first_not_of(delims, tokenEnd);
tokenEnd = line.find_first_of(delims, tokenStart);
// substr expects length, not end of substring
token = line.substr(tokenStart, tokenEnd-tokenStart);
剪掉所有空白并读入。或者如果有空白,将读卡器的位置改为+1。标题有isalpha
,isdigit
,等等,这可能会有所帮助。如果你需要适当的本地化,你可以使用C++
locales获得基本相同的内容。如果数字是双格式的呢这不是一个问题吗?我想这正是我想要的。谢谢!只有一个问题。假设我把所有这些都放进一个1乘1的向量中,那么我如何在向量的一个块中插入一个像4.5这样的数字呢?当然,这意味着他的最后一个-3
将被解析为一个符号,后面是一个数字。并且ers将只是一个位数。我也考虑过大致相同的事情(但使用getline
,然后在istringstream
上使用>
,这将自动跳过空格),但发现我需要多个字符向前看。@user3115535您需要逐个字符分析数字字符。例如,如果遇到4,您需要跟踪未来的字符,直到您不断得到“.”或多个数字。@JamesKanze Yes,因此“-”符号应视为可能的“多个数字num”此外,如果使用stringstream,则不会跟踪数字和字符的相对顺序。此赋值不包含负数,因此我在这方面有点幸运,因此我设法将整行内容转换为一个向量,现在我可以跟踪下一个索引。
char ch;
cin >> std::noskipws; // needed to recognize the end of line character.
while ( cin >> ch && ch != '\n' ) {
if ( ch != ' ' ) {
if ( ch >= '0' && ch <= '9' {
// do something with numbers;
} else {
// do something with characters.
}
}
}
cin >> std::skipws;
string delims = " \t"
getline(file, line);
int tokenStart, tokenEnd = 0;
string token;
tokenStart = line.find_first_not_of(delims, tokenEnd);
tokenEnd = line.find_first_of(delims, tokenStart);
// substr expects length, not end of substring
token = line.substr(tokenStart, tokenEnd-tokenStart);