Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从文件的单行读取输入字符_C++_Inputstream - Fatal编程技术网

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);