프로그래밍/C언어

스트링 검색 및 변환

mi-nos 2019. 5. 23. 01:06

1) strstr , strchr, strrchr

#include <string.h> 
void main()
{
    char s1[30] = "qazwsxedcrfvtgbyhn";
    char *ptr = strchr(s1, 'a');  //from left
    char *ptr2 = strrchr(s1, 'a'); //from right 
    char *ptr3 = strstr(s1, 'az'); 
    while (ptr != NULL) {
        printf("%s\n", ptr);         
        ptr = strchr(ptr + 1, 'a');  
    }
}

 

2) strtok

   strtok 사용 시 원본 문자열이 변형되므로 주의할 것 

 

char s1[30] = "2015-06-10T15:32:19"; 
    char *ptr = strtok(s1, "-T:");
    while (ptr != NULL) {
        printf("%s\n", ptr);          
        ptr = strtok(NULL, "-T:");   
    }
 

 

 

3) 문자열 숫자 변환 

https://dojang.io/mod/page/view.php?id=386 

 

C 언어 코딩 도장: 46.2 특정 진법으로 표기된 문자열을 정수로 변환하기

이번에는 특정 진법으로 표기된 문자열을 정수로 변환해보겠습니다. strtol 함수를 사용하면 16진법으로 표기된 문자열을 정수로 바꿀 수 있으며 함수 이름은 string to long에서 따왔습니다(stdlib.h 헤더 파일에 선언되어 있습니다). strtol(문자열, 끝포인터, 진법); long strtol(char const *_String, char **_EndPtr, int _Radix); 성공하면 변환된 정수를 반환, 실패하면 0을 반환 stri

dojang.io

4) 그외 문자열 변환 처리

https://btyy.tistory.com/222

 

[C언어] 문자열 자르기( strtok() ) / 문자열과 숫자 서로 변환하기 ( atoi(), strtol(), atof(), strtof() ) / 회문 판별, N-gram 만들기

문자열 자르기( strtok() ) / 문자열과 숫자 서로 변환하기 ( atoi(), strtol(), atof(), strtof() ) / 회문 판별, N-gram 만들기에 대해서 정리한다. 문자열 자르기 - strtok(대상문자열, 기준문자); ( 기준문자..

btyy.tistory.com

5) 두문자열이 교차하면서 유사도 확인 ( 동일 글자가 몇개 있는지 확인 )

firstStr:  GTTAG ->
secondStr:  <- AGTCATG  

same : 문자열 교차시 같은 글자가 가장 많은 것 
swapIndex : 첫번째 문자열이 모두 이동되어 두번째 문자열이 왼쪽으로 이동 
firstStr, secondStr : 교차할 문자열

for(int swapindex=0; swapIndex<2; swapIndex++) {
	int len1 = strlen(firstStr);
	int len2 = strlen(secondStr); 
	
	char tmpStr[MAX];
	int pos=0;
	for(int i=0; i<len1; i++) {
		int similarity =0;
		memset(tmpStr, 0, sizeof(char)*MAX);
		strncpy(tmpStr, firstStr, sizeof(char) * (++pos));
		for(int j=0; j<strlen(tmpStr); j++) {
			if(tmpStr[j] == secondStr[len2 - pos +j]) similarity++;
		}
		if(same < similarity) same = similarity;
	}
	
	memset(tmpStr, 0, sizeof(char) * MAX);
	strcpy(tmpStr, firstStr);
	strcpy(firstStr, secondStr);
	strcpy(secondStr,tmpStr);
}