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文件的功能。
答案 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
,则从文件读取还是从字符串读取几乎没有区别。