c++ 파일의 줄별 읽기와 문자 일치 실현
C++ 파일 읽기
우선 테스트에 사용할 txt 파일을 만듭니다. 예를 들어 다음과 같은 이름은mindspore입니다.txt 파일 (이 이름을 지은 이유는 최근에 마인드spore를 연구하고 있기 때문에 가장 쉽게 얻을 수 있는 데이터는 마인드spore의 핑계api 문서입니다):
MindSpore Python API
MindSpore Python API
mindspore
mindspore.common.initializer
mindspore.communication
mindspore.compression
mindspore.context
mindspore.dataset
mindspore.dataset.config
mindspore.dataset.text
mindspore.dataset.transforms
mindspore.dataset.vision
mindspore.explainer
mindspore.mindrecord
mindspore.nn
mindspore.numpy
mindspore.nn.probability
mindspore.ops
mindspore.profiler
mindspore.train
MindArmour Python API
mindarmour
mindarmour.adv_robustness.attacks
mindarmour.adv_robustness.defenses
mindarmour.adv_robustness.detectors
mindarmour.adv_robustness.evaluations
mindarmour.fuzz_testing
mindarmour.privacy.diff_privacy
mindarmour.privacy.evaluation
mindarmour.privacy.sup_privacy
mindarmour.utils
MindSpore Hub Python API
mindspore_hub
MindSpore Serving Python API
mindspore_serving
MindQuantum Python API
mindquantum
그리고 이 파일을 한 줄씩 읽는 데 사용할 C++ 코드를 만듭니다. getline 함수를 통해 가져온 줄 문자열을strline에 저장하고 한 줄을 읽을 때마다 화면에 출력합니다.while 순환을 사용하기 때문에 index 방안을 사용하여 순환을 뛰어넘는 조건을 설정하고 특정한 줄 범위만 읽습니다.
// iofile.cpp
#include <iostream>
#include <fstream>
#include <string>
int main()
{
using namespace std;
string filename="mindspore.txt";
ifstream fin(filename.c_str());
int index = 0;
string strline;
while (getline(fin, strline) && index < 20)
{
cout << strline << endl;
index ++;
}
fin.close();
cout << "Done!
";
return 0;
}
읽기가 끝난 후,close () 를 사용하여 파일을 닫는 것을 기억하십시오.위 코드의 실행 결과는 다음과 같습니다.
dechin@ubuntu2004:~/projects/gitlab/dechin/$ g++ iofile.cpp
dechin@ubuntu2004:~/projects/gitlab/dechin/$ ./a.out
MindSpore Python API
MindSpore Python API
mindspore
mindspore.common.initializer
mindspore.communication
mindspore.compression
mindspore.context
mindspore.dataset
mindspore.dataset.config
mindspore.dataset.text
mindspore.dataset.transforms
mindspore.dataset.vision
mindspore.explainer
mindspore.mindrecord
mindspore.nn
mindspore.numpy
mindspore.nn.probability
mindspore.ops
mindspore.profiler
mindspore.train
Done!
여기서 사용하는 g++ 버전은 9.3.0입니다.
dechin@ubuntu2004:~/projects/gitlab/dechin/$ g++ --version
g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
상기 사례는 20줄의 내용을 읽었기 때문에 Linux에서 우리는 헤드를 통해 20줄의 파일 내용을 볼 수 있다.
dechin@ubuntu2004:~/projects/gitlab/dechin/$ head -n 20 mindspore.txt
MindSpore Python API
MindSpore Python API
mindspore
mindspore.common.initializer
mindspore.communication
mindspore.compression
mindspore.context
mindspore.dataset
mindspore.dataset.config
mindspore.dataset.text
mindspore.dataset.transforms
mindspore.dataset.vision
mindspore.explainer
mindspore.mindrecord
mindspore.nn
mindspore.numpy
mindspore.nn.probability
mindspore.ops
mindspore.profiler
mindspore.train
비교를 통해 두 결과가 일치하는 것을 발견하였다.C++ 문자열 일치
우리는 상술한 txt 텍스트에서 문자context가 있는 줄을 다른 줄과 다르게 표시하고자 하는 테스트 사례와 같다.이 때 C++의 문자열 일치 기능을 사용해야 합니다. 그 형식은string입니다.find ("context"), 되돌아오는 것은 식별 코드입니다. 존재 여부나 존재 위치를 표시하는 데 사용되며, 문자가 존재하지 않으면 되돌아오는 결과는string::npos와 같습니다.이 사고방식에 따라 우리는 검색 과정에서 context 문자를 만나면 1을 출력하고 그렇지 않으면 0을 출력한다. 구체적인 코드는 다음과 같다.
// iofile.cpp
#include <iostream>
#include <fstream>
#include <string>
int main()
{
using namespace std;
string filename="mindspore.txt";
ifstream fin(filename.c_str());
int index = 0;
string strline;
while (getline(fin, strline) && index < 20)
{
bool exists = strline.find("context") == string::npos;
cout << strline << '\t' << !exists << endl;
index ++;
}
fin.close();
cout << "Done!
";
return 0;
}
위 코드의 실행 결과는 다음과 같습니다.
dechin@ubuntu2004:~/projects/gitlab/dechin/$ g++ iofile.cpp && ./a.out
MindSpore Python API 0
MindSpore Python API 0
mindspore 0
mindspore.common.initializer 0
mindspore.communication 0
mindspore.compression 0
mindspore.context 1
mindspore.dataset 0
mindspore.dataset.config 0
mindspore.dataset.text 0
mindspore.dataset.transforms 0
mindspore.dataset.vision 0
mindspore.explainer 0
mindspore.mindrecord 0
mindspore.nn 0
mindspore.numpy 0
mindspore.nn.probability 0
mindspore.ops 0
mindspore.profiler 0
mindspore.train 0
Done!
우리는 context를 포함하는 줄의 끝에 1이 출력되고 다른 줄의 끝에 0이 출력된다는 것을 알 수 있다.C++ 실행 시간 통계
python에서 우리가 자주 사용하는 기능 중 하나는 가져오는 시간입니다.시간 () 을 기록하여 두 번의 시간 사이의 차치를 계산하면 프로그램의 정확한 운행 시간을 얻을 수 있다.C++ 중 유사한 용법은 clock_t, 여기에서 테스트를 편리하게 하기 위해 우리는 상술한 코드를reader 함수에 봉인한 다음main 함수에서 호출하고 운행 시간을 통계합니다.
// iofile.cpp
#include <iostream>
#include <fstream>
#include <string>
#include <time.h>
using namespace std;
int reader()
{
string filename="mindspore.txt";
ifstream fin(filename.c_str());
int index = 0;
string strline;
while (getline(fin, strline) && index < 20)
{
bool exists = strline.find("context") == string::npos;
cout << strline << '\t' << !exists << endl;
index ++;
}
fin.close();
cout << "Done!
";
return 0;
}
int main()
{
clock_t start, end;
start = clock();
reader();
end = clock();
cout << "The time cost is: " << double(end-start)/CLOCKS_PER_SEC << "s" << endl;
}
위 코드의 실행 결과는 다음과 같습니다.
dechin@ubuntu2004:~/projects/gitlab/dechin/$ g++ iofile.cpp && ./a.out
MindSpore Python API 0
MindSpore Python API 0
mindspore 0
mindspore.common.initializer 0
mindspore.communication 0
mindspore.compression 0
mindspore.context 1
mindspore.dataset 0
mindspore.dataset.config 0
mindspore.dataset.text 0
mindspore.dataset.transforms 0
mindspore.dataset.vision 0
mindspore.explainer 0
mindspore.mindrecord 0
mindspore.nn 0
mindspore.numpy 0
mindspore.nn.probability 0
mindspore.ops 0
mindspore.profiler 0
mindspore.train 0
Done!
The time cost is: 0.000245s
출력 시간은 이 함수의 운행 시간을 모두 0.2ms로 표시합니다.요약
본고는 C++의 세 가지 기초 조작을 간단하게 소개했다. 한 줄씩 파일 내용을 읽고 문자열의 일치와 운행 시간의 통계를 분석하며 간단한 범례를 통해 이 세 가지 기본적인 기능을 실현했다.python에 비해 C++의 코드 작성량은 틀림없이 많을 것이다. 그러나 C++가 가져올 수 있는 효율 이득을 감안하여 우리도 그 기본적인 용법과 기능 실현을 이해해야 한다.
이상은 c++가 파일의 줄마다 읽기와 문자의 일치에 대한 상세한 내용입니다. c++ 파일의 줄마다 읽기와 문자의 일치에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c++ 파일의 줄별 읽기와 문자 일치 실현예를 들어 다음과 같은 이름은mindspore입니다.txt 파일 (이 이름을 지은 이유는 최근에 마인드spore를 연구하고 있기 때문에 가장 쉽게 얻을 수 있는 데이터는 마인드spore의 핑계api 문서입니다): 그...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.