分别统计文本文件中每一个字符个数、单词总的个数;要求统计结果输出到另外一个文件中,源文件和结果文件名均由命令行参数指定。用c++语言解决这个问题,最好用初学者能够看懂,写出的方法解决
时间: 2024-09-24 16:25:43 浏览: 31
要使用C++解决这个问题,你可以使用`std::ifstream`读取源文件中的内容,`std::ofstream`写入结果文件,以及`std::string`处理字符串。以下是一个简单的示例,适合初学者理解:
```cpp
#include <iostream>
#include <fstream>
#include <string>
// 函数用来统计单个字符和单词的数量
void countCharactersAndWords(const std::string& inputFile, const std::string& outputFile) {
std::ifstream reader(inputFile);
if (!reader.is_open()) {
std::cerr << "Error opening file: " << inputFile << std::endl;
return;
}
std::ofstream writer(outputFile);
if (!writer.is_open()) {
std::cerr << "Error opening file for writing: " << outputFile << std::endl;
return;
}
int characters = 0;
int words = 0;
std::string word;
// 逐行读取并计数
std::string line;
while (std::getline(reader, line)) {
for (char c : line) {
++characters; // 每次遇到字符就加一
// 判断是否为单词分隔符(这里假设空格和标点符号)
if (ispunct(c)) {
if (!word.empty()) { // 如果当前有词,加一并开始记录新的词
++words;
word.clear();
}
} else {
word += c;
}
}
// 文件末尾可能也会有一个单词
if (!word.empty()) {
++words;
}
}
writer << "Characters: " << characters << "\n";
writer << "Words: " << words << "\n";
reader.close();
writer.close();
}
int main(int argc, char* argv[]) {
if (argc != 3) {
std::cerr << "Usage: program_name input_file.txt output_file.txt" << std::endl;
return 1;
}
std::string inputFile = argv[1];
std::string outputFile = argv[2];
try {
countCharactersAndWords(inputFile, outputFile);
std::cout << "Character and word counts have been written to " << outputFile << "." << std::endl;
} catch (const std::exception& e) {
std::cerr << "Error occurred: " << e.what() << std::endl;
}
return 0;
}
```
这个程序会在命令行中接受两个参数:源文件名和结果文件名。它打开源文件,逐行读取,统计每个字符和单词的数量,然后将这些信息写入结果文件。注意,这个例子简单地将空格、逗号、句号等视为单词分隔符。
运行时,请确保提供正确的文件路径,例如:
```
./your_program_name input.txt output.txt
```