如何将所有文件字符转换为大写或小写

  • 本文关键字:转换 字符 文件 c++
  • 更新时间 :
  • 英文 :


我试图将文件中的每个字符(用于toupper()tolower()功能。但是我不能将结果而不是角色放置。

我使用 vector来解决它。

是否有一种简单的方法来解决此问题?

void UpperCase(){
    fstream file;
    char name[81] , ch;
    vector<char> container;
    cout << "Enter the file name : ";
    cin >> name;
    file.open(name,ios::in);
    while(!file.eof() && !file.fail()){
        file.get(ch);
        container.push_back(toupper(ch));
    }
    file.close();
    file.open(name,ios::out);
    for(int i=0 ; i<container.size()-1 ; ++i){
        file.put(container[i]);
    }
    file.close();
    return;
}

这是一种有效的方法:

char buffer[4096];
std::string name;
std::cout << "Enter filename: ";
std::cin >> name;
std::ifstream input(name.c_str(), ios::binary);
const std::string out_filename = name + ".upper_case";
std::ofstream output(out_filename.c_str(), ios::binary);
while (input.read(buffer, sizeof(buffer))
{
  const unsigned int chars_read = input.gcount();
  std::transform(&buffer[0], &buffer[chars_read],
                 &buffer[0], toupper);
  output.write(buffer, chars_read);
}

上面的代码在一个字符块中读取,然后将它们转换为大写,然后将块写入另一个文件。

写入另一个文件是一个安全的练习,您无需将整个文件读为内存。

您可以更改缓冲区的大小以提高程序效率。建议尺寸为512的倍数,因为这是硬盘驱动器扇形的标准化尺寸。

编辑1:
如果您对std::transform过敏,请用循环替换呼叫以转换字符。

最新更新