CS(computer science)

[minishell] - 환경변수 파싱하기, 재귀함수 이용한 문자열 추출함수 만들기

ebang 2023. 1. 10. 23:00
반응형

key = value 라고 지정된 문자열에서 key만을 추출하는 함수를 만드려고 한다.

(key = value 에서 value를 찾으려면 ‘=’을 찾은 후 그 이후의 문자열을 복사, 반환하면 된다. )

(존재한다는 가정 하에)

 

 

문자열, idx= 0 부터 하나씩 증가시키면서 문자열[idx]를 검사한다.

‘=’를 만나면 그동안 찾은 idx = 문자열 길이 이므로

key_finder(char *key_value, int idx)
{

		if (ret[idx] == '=')
		{
			char * ret = (char *)malloc(sizeof(char)*(idx + 1));
			ret[idx] = ;
			return ret;
		}

}

아직 ‘=’를 만나기 전이라면

-재귀적으로 수행,

스택에 쌓인 후  재귀가 종료되기 시작하면(= 이전까지의 문자들이 스택에 쌓여있을 것임) 그 인덱스에 해당하는 문자열을 저장.

key_finder(char *key_value, int idx)
{

	
	if(ret[idx] == '=')
	{
		char * ret = (char *)malloc(sizeof(char)*(idx + 1));
		ret[idx] = ;
		return ret;
	}
	ret = key_finder(key_value, idx + 1);
	ret[idx] = key_value[idx];
	return ret;
}

오류 처리 - 널을 만나버렸다면 ('='을 못찾았다는 뜻이므로 return 0 (오류))

  • malloc error
  • NULL
  • key_finder 재귀 도중 오류
key_finder(char *key_value, int idx)
{
	if(key_value[idx] == NULL)
		return 0;
	
	if(key_value[idx] == '=')
	{
		char * ret = (char *)malloc(sizeof(char)*(idx + 1));
		if(!ret)
			return (0);
		ret[idx] = 0;
		return ret;
	}
	ret = key_finder(key_value, idx + 1);
	if(!ret)
		return (0);
	ret[idx] = key_value[idx];
	return ret;
}

 

반응형