y{N}y{N-1}...y{1}
형태의 길이가 N 인 y
이 있다고 가정합니다. 그런 다음 길이가 L (L보다 작은 L) 인 또 다른 16 진수 문자열 x
이 주어진다면이 문자열이 y
안에 몇 번이나 나타나는지 확인하고 싶습니다. y{N}...x{L}x{L-1}...x{1}...y{j}..x{L}x{L-1}...x{1}....y{1}
과 같이 말하십시오. C에서이 작업을 수행하는 가장 효율적인 방법은 무엇입니까? ... 큰 데이터베이스에서이 작업을 실행하려면 실제로 효율적인 구현이 필요합니다.txt 파일에서 길이가 L 인 특정 문자열을 찾음
-1
A
답변
1
요청은 단순한 string search algorithm입니다. 이를 수행 할 알고리즘이 많이 있습니다. 대부분은 전처리를 통해 O (L + N)에서 좋은 답을 줄 것입니다.
suffix tree을 사용하면 O (L + Z)에서 더 빠른 답변을 제공 할 수 있습니다. 여기서 Z는 y에서 x가 나오는 횟수입니다. 접미사 트리는 많은 메모리 공간을 차지하지만 (O (N²)), 이상적인 선택이 아닐 수도 있습니다.
1
"16 진수"는 여기 의미하는 것이 아닙니다. C++는 컴퓨터 언어이며 비트로 작동합니다. "16 진수"는 인간 소비를 위해 4 비트를 함께 그룹화하는 편리한 방법입니다.
마찬가지로 C++에서는 y{N}y{N-1}...y{1}
과 같은 문자열을 인덱싱하지 않습니다. 그것들을 y[0],y[1],y[N-1]
으로 색인합니다. (y[N]
은 없습니다.)
정상적인 상황에서는 std::string::find
이 디스크보다 빠르며 빠르다는 것을 의미합니다.
1
C++에서 가장 효율적인 방법은 무엇입니까?
에 한번이처럼 입력 파일의 std::istream_iterator
에서 std::search
: 그 빠른 충분하지 않으면
#include <string>
#include <iterator>
#include <iostream>
#include <algorithm>
int main() {
// std::ifstream input("input.txt");
std::istream& input(std::cin);
std::string search_for("1234");
std::istream_iterator<char> last;
std::istream_iterator<char> it(input);
int count(0);
while((it = std::search(it, last, search_for.begin(), search_for.end())) != last) {
count++;
}
std::cout << count << "\n";
}
, 당신은 std::istreambuf_iterator
을 시도 할 수 있습니다.
이 빠르지 않으면 파일을 메모리 매핑하고 이터레이터로 초기 및 최종 포인터를 사용해보십시오.
관련 문제
- 1. NSScanner 용 .txt 파일에서 문자열을 검색하려면 어떻게해야합니까?
- 2. regex - 특정 문자열을 찾지 만 특정 문장에없는 경우 찾음
- 3. 정규식이 특정 인스턴스를 찾음
- 4. 길이가 0 인 일치
- 5. txt 파일에서 특정 텍스트의 발생을 계산하십시오.
- 6. 메신저 .txt 파일에서 특정 텍스트를 제거하려고합니다.
- 7. 길이가 0 인 인수가
- 8. 파일에서 문자열을 추출하고 C#
- 9. 문자열을 길이가 4 인 문자열로 그룹화하는 방법은 무엇입니까?
- 10. .txt 파일에서 플로트 읽기
- 11. txt 파일에서 바이트 [zip]
- 12. .txt 파일에서 배열로드
- 13. Matlab의 txt 파일에서 읽기
- 14. 정규식의 길이가 2 인 이유는 무엇입니까?
- 15. 특정 .txt 파일 읽기?
- 16. 길이가 tsql 인 하위 문자열
- 17. 가변 길이가 int 배열 인 문자열?
- 18. Maple : 길이가 L 인 배열을 가지고 있습니다. 반복없이 가능한 모든 순열을 사용하여 배열을 만드는 방법은 무엇입니까?
- 19. txt 파일에서 행을 검색하고 배치 파일에서 다음 13 행을 삭제합니다.
- 20. 과 같이 포맷 .txt 파일에서 요소를 읽는 동안 그것을 채우기, 내가 배열을 만들 .txt 인 요소
- 21. 어떻게 시작 파일에서 특정 라인을 인쇄하고이 같은 .txt 파일이
- 22. 길이가 변수 인 DOS 하위 문자열
- 23. 내가 특정 입력에서 검색이 코드를 사용하는 모든 .txt 인
- 24. 폴더의 여러 파일에서 문자열을 바꾸는 방법은 무엇입니까?
- 25. 길이가 같지 않은 문자열을 청크로 묶습니다.
- 26. 박쥐 - 에코가 txt 파일에서 벗어났습니다
- 27. MySQL은 txt 파일에서 테이블을 만듭니다
- 28. txt 파일에서 일부 기호 제거
- 29. txt 파일에서 데이터베이스 로깅 시스템
- 30. && 서식이있는 txt 파일에서 AS3로드 변수
너무 명확하지 않습니다 ... 실제 사례를 게시 할 수 있습니까? –
['strstr'] (http://pubs.opengroup.org/onlinepubs/009695399/functions/strstr.html) 또는 ['std :: string :: find'] (http : //en.cppreference. co.kr/w/cpp/string/basic_string/find). 루프를 호출하십시오. –
16 진수가 1111이 "더 큰"헥스 안에 몇 번 나타나는지 계산하고 싶습니다 (예 : 숫자가 8366461111이면 54641111456411114342가 두 번 나타남). – Hashed