alv*_*vas -4 c++ string newline count wc
查看计算行数时的示例实现wc.c,它循环遍历文件,一次一个字符并累加 '\n' 以计算换行数:
#define COUNT(c) \
ccount++; \
if ((c) == '\n') \
lcount++;
Run Code Online (Sandbox Code Playgroud)
有没有办法只在文件中查找“\n”并继续跳转到换行符并进行计数?
寻找 '\n' 与一次读取一个字符直到我们看到 '\n' 并对其进行计数是一样的吗?
'\n'好吧,除了一个角色之外,所有角色都不是。无分支算法可能会更快。
不过你尝试过吗std::count?
#include <string>
#include <algorithm>
int main() {
const auto s = std::string("Hello, World!\nfoo\nbar\nbaz");
const auto lines_in_s = std::count(s.cbegin(), s.cend(), '\n');
return lines_in_s;
}
Run Code Online (Sandbox Code Playgroud)
或者使用文件:
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
int main() {
if (std::ifstream is("filename.txt"); is) {
const auto lines_in_file =
std::count(std::istreambuf_iterator<char>(is),
std::istreambuf_iterator<char>{}, '\n');
std::cout << lines_in_file << '\n';
}
}
Run Code Online (Sandbox Code Playgroud)