substr 함수를 사용하지 않고 문자열이 C에서 다른 문자열의 부분 문자열인지 어떻게 확인합니까?check is string은 다른 문자열의 부분 문자열입니다.
답변
사용하지 마십시오 substr
... 사용 strstr
/strnstr
!
진지하게, 정확히 똑같은 것을하지 않으면 다른 어떤 것도 빠르지 않을 것입니다. 왜 그걸 원하지 않는거야?
편집 : 그래, 더 나은 점근 성능이있는 알고리즘이 있습니다. 단일 문자열에 대한 텍스트 검색의 경우 표준 라이브러리보다 성능이 뛰어나다는 사실을 알고 놀랐습니다.
나는 이것이 KMP (또는 Boyer-Moore, @Laurence Gonsalves가 지적했듯이)보다 빠르다는 주장에 도전 할 것이다. 이것은 순진한^2 해결책입니다. – danben
그것은 O (strlen (s) * strlen (sub))입니다. 이것은 제곱이 아닙니다 ... 당신은'strcmp'를 초기에 반환하도록 코딩 할 수 있습니다. 이것은 큰 -O를 향상시키지 않지만 훨씬 빠릅니다. 연습. – Potatoswatter
"O (strlen (s) * strlen (sub))입니다. 아무 것도 제곱되지 않습니다." 그 중 하나는 다른 것보다 커야합니다. 맞습니까? – danben
롤링 해시 방법 (Rabin-Karp)을 사용하거나 KMP을 구현할 수 있습니다. 이는 상태 시스템과 비슷합니다.
일반적으로 Rabin-Karp는 여러 대상 문자열을 검색 할 때 사용됩니다. 해시 평등이 아닌 실제 평등을 위해 필요한 두 번째 검사는 원본 문자열을 한 번만 검사 할만큼 가치가 있기 때문에 일반적으로 사용됩니다 . 당신의 경우에, 어느 쪽이든은 잘 할 것이다.
또한 O (n^2) 인보다 간단한 솔루션이 있으며 원본 문자열의 모든 위치에서 대상 문자열을 확인해야합니다.
... 둘 다'strstr'보다 열등합니다. – Potatoswatter
나는 그가 솔루션을 구현해야한다는 것을 의미한다고 생각했습니다. 그러나 논쟁의 여지가 있기 때문에,'strstr'은 어떻게 구현됩니까? – danben
Boyer-Moore (http://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm)도 있는데, 일반적으로 KMP보다 빠릅니다. 하지만 네, @Potatoswatter, 왜 당신은'strstr'이 너무 굉장하다고 생각하니? 나는 표준이 구현이나 효율성에 대해 아무 것도 말하지 않는다고 확신한다. –
void main()
{
char str[80],search[10];
int count1=0,count2=0,i,j,flag;
puts("Enter a string:");
gets(str);
puts("Enter search substring:");
gets(search);
//determines the src length
while (str[count1]!='\0')
count1++;
//determines the key length
while (search[count2]!='\0')
count2++;
for(i=0;i<=count1-count2;i++)
{
for(j=i;j<i+count2;j++)
{
flag=1;
if (str[j]!=search[j-i])
{
flag=0;
break;
}
}
if (flag==1)
break;
}
if (flag==1)
puts("SEARCH SUCCESSFUL!");
else
puts("SEARCH UNSUCCESSFUL!");
getch();
}
- 1. String은 다른 문자열의 일부를 포함 할 수 없습니다. .NET 2.0
- 2. 문자열의 여러 부분 문자열
- 3. 문자열의 부분 문자열 조합
- 4. Groovy : 부분 문자열의 색인?
- 5. SQL - 문자열의 선택 부분
- 6. 문자열의 T-SQL 구문 부분
- 7. 정규식 - 숫자 문자열의 교체 부분
- 8. 문자열입니다 클래스 - 왜
- 9. Ruby : 배열의 다른 문자열의 부분 문자열 인 문자열을 제거합니다.
- 10. String은 Javascript에서 Object를 상속합니까?
- 11. std :: string은 STL의 일부입니까?
- 12. 부분 문자열의 일부가 참이면 정규 표현식 as3이 다음 부분 문자열의 일부를 바꿉니다.
- 13. 주어진 문자열의 부분 문자열 복사 주어진 문자열의 끝 색인
- 14. Regex check previous line
- 15. distanceFromLocation to string은
- 16. ADO의 연결 문자열입니다. NET
- 17. 문자열입니다. 호환 동작
- 18. 리피터 버튼 CommandArgument가 빈 문자열입니다.
- 19. 그려진 NSString의 부분 문자열의 배경색을 변경 하시겠습니까?
- 20. 문자열의 일치하는 부분 만 가져 오기 R
- 21. PHP에서 문자열의 부분 콘텐츠 가져 오기
- 22. 파이썬 문자열의 이진 데이터 부분 읽기
- 23. 문자열의 각괄호 안에있는 부분 문자열을 얻는 방법
- 24. Regex.Replace는 문자열의 시작 부분 만 바꿉니다.
- 25. C++ - 다른 부분
- 26. 왜 std :: string은 빈 rep입니까?
- 27. 퍼지 매치로 문자열 내에서 부분 문자열의 위치를 찾는 방법
- 28. jQuery check doctype
- 29. Oracle Check Constraint
- 30. CHECK 제약 조건은
숙제 ??? ... –
C에'substr()'함수가 없으므로 올바른 경로에 있으므로 사용할 수 없습니다. –