我无法开始使用某个程序。我需要从文件中读取每个单词,然后将其转换为小写。我想找到它之后std :: cout每个单词。我假设我需要使用Cstr()一些方法。我猜我应该使用像
这样的东西ofs.open(infile.c_str());
但如何降低案例?
string[i] = tolower(string[i]);
然后,
std::cout << string[i];
感谢您的帮助。
答案 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::transform
和istream_iterator
对ostream_iterator
进行结果。