C ++语法运算符功能?

时间:2018-10-15 19:27:42

标签: c++

int main()
{
   ifstream inputFileStream;  // declare the input file stream
   int lettersArray[ LIMIT];  // count occurrences of characters
   char c = ' ';              // input character
   int i;                     // loop counter

    string fileName = "MacbethEnglish.txt";

   // open input file and verify
   inputFileStream.open( fileName.c_str());   // Convert C++ string to expected C-style string 
   if( !inputFileStream.is_open()) {
     cout << "Could not find input file.  Exiting..." << endl;
     exit( -1);
   }

   // initialize lettersArray count values 
   for (i=0; i<LIMIT; i++) {
      lettersArray[ i] = 0;
   }

   // Process input one character at at time, echoing input
   // Note that the input skips leading spaces, which is why we don't see
   // them as part of the output.
   cout << "Reading characters from a file... " << endl;
   **while( inputFileStream >> c)** {
      // convert alphabetic input characters to upper case
      if( isalpha( c)) {
          c = toupper( c);
          lettersArray[ c-'A']++; // update letter count, using the character as the index
          // cout << c << " ";    // Takes too long to display when enabled
      }
   }

while(inputFileStream >> c)到底应该做什么?我不了解条件/或运算符。我正在尝试将代码从读取文本文件更改为读取字符串。我不确定如何执行此操作。我想创建一个相同的功能,但要更改字符串而不是txt文件的功能。

2 个答案:

答案 0 :(得分:0)

运算符>>应用于流时,将从流中读取格式化的输入并将其存储到右侧的变量中。输入的预期格式取决于相应变量的类型。因此,如果c的类型为char,则操作符>>将读取单个字符(如果有)。如果流无法读取预期的输入(例如,如果已到达文件末尾),则整个操作的结果为false(作为将错误标志设置为布尔值的结果流进行转换的结果),这样就不会再进入循环了。

答案 1 :(得分:0)

基本上,这是提取字符后将流转换为bool的过程。转换产生false,例如到达文件末尾时(更具体地说,它返回!fail())。

例如,请在此处查看operator<<https://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt

例如,这里是用于转换为bool的地方:https://en.cppreference.com/w/cpp/io/basic_ios/operator_bool

还请注意,如果您使用std::stringstream代替std::ifstream,则从文件读取还是从字符串读取几乎没有区别。