C ++如何读取文件,将每个单词转换为小写,然后cout每个单词?

时间:2012-03-18 21:31:52

标签: c++

我无法开始使用某个程序。我需要从文件中读取每个单词,然后将其转换为小写。我想找到它之后std :: cout每个单词。我假设我需要使用Cstr()一些方法。我猜我应该使用像

这样的东西
ofs.open(infile.c_str());

但如何降低案例?

string[i] = tolower(string[i]);

然后,

std::cout << string[i];

感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

这是一个完整的解决方案:

#include <ctype.h>
#include <iterator>
#include <algorithm>
#include <fstream>
#include <iostream>

char my_tolower(unsigned char c)
{
    return tolower(c);
}

int main(int ac, char* av[]) {
    std::transform(std::istreambuf_iterator<char>(
        ac == 1? std::cin.rdbuf(): std::ifstream(av[1]).rdbuf()),
        std::istreambuf_iterator<char>(),
        std::ostreambuf_iterator<char>(std::cout), &my_tolower);
}

答案 1 :(得分:1)

我找到了自己问题的答案。我真的不想使用变换,但这确实有用。如果其他人偶然发现了这一点,我就是这样想的...

#include <iostream>
#include <string>
#include <fstream>

int main()
{
std::ifstream theFile;
theFile.open("test.txt");
std::string theLine;
while (!theFile.eof())
{
  theFile >> theLine;       
  for (size_t j=0; j< theLine.length(); ++j)
  {
    theLine[j] = tolower(theLine[j]);
  }
  std::cout<<theLine<<std::endl;
     } 

 return 0;
}

答案 2 :(得分:1)

int main()
{

    ofstream of("xyz.txt");

    clrscr();
    ifstream inf;
    char line;
    inf.open("abc.txt");
    int count=0;
    while(!inf.eof())
    {
        inf.get(line);
        if(line>=65 && line<=123)
        {
            cout<<line;
            line=line-32;
            of<<line;
            count++;
            cout<<line;
        }
    }
    cout<<count;
    getch();
    return 0;
}

答案 3 :(得分:0)

首先,除非这类似于家庭作业,否则一次处理一个字符而不是一次处理一个字词可能更容易。

是的,你有很好的想法转换为小写,你通常希望将输入转换为unsigned char,然后再将其传递给tolower

就个人而言,我会避免使用明确的输入和输出,而是使用std::transformistream_iteratorostream_iterator进行结果。