从文件 c++ 中计算大写字母

Count capital letters from file c++

// C++ program to count the uppercase
#include<iostream> 
#include<fstream>
#include <string>
using namespace std;

// Function to count uppercase
int Count ( string str )
{
    int upper = 0;
    for (int i = 0; i < str.length(); i++) {
      if (str[i] >= 'A' && str[i] <= 'Z')
        upper++;
    }
    return upper;
}

// Driver function 
int main()
{
    //Open the file
    ifstream openedFile;

    //This is how you turn the potential file into an actualized file inside the defualt directory.
    openedFile.open ( "random words.txt" );

    string str[10001]; int i = 0;
    int uppercase = 0;
    
    while (!openedFile.eof())
    {
        getline ( openedFile, str[i], '\n');
        uppercase = Count(str[i]);
        if (Count(str[i]) == 1) uppercase++;
        if (Count(str[i]) == 3) uppercase++;
        if (Count(str[i]) == 2) uppercase++;
        cout << Count(str[i]) << "\n";
    }

    cout << "Uppercase letters: " << uppercase << endl;

    //Close the file
    openedFile.close ();
}

说明出现了大写字母。有时甚至连成一行 3 个。它不会添加到大写变量。

您将在下一次迭代中覆盖大写变量的值:uppercase = Count(str[i]);。只需使用 += 并删除那些 if (Count(str[i]) == X) uppercase++;

此外,根本不需要您只使用第一个条目的 1001 个字符串数组。您可以在 main.

中声明 string str 并将 str[i] 替换为 str

如果其他人可能正在搜索此线程的标题,这里是使用算法函数和流的解决方案。

#include <algorithm>
#include <iterator>
#include <iostream>
#include <cctype>
#include <fstream>

int main()
{
    std::ifstream openedFile("random words.txt");
    
    std::cout << "Uppercase letters: " 
        <<  std::count_if(std::istream_iterator<char>(openedFile), 
                          std::istream_iterator<char>(), 
                          [](char ch) 
                            {return std::isupper(static_cast<unsigned char>(ch));}
                         ) 
        << "\n";
}

使用 std::count_if 算法,可以读入文件,使用流迭代器并将读取的每个字符发送到 lambda 函数。

在lambda函数中,检查字符是否为大写。然后 std::count_if 将 return 计数。