본문 바로가기
Matlab

[Matlab] 문자열 행렬에서 일치하는 문자 인덱스 찾기 : strcmp, logical array

by Mene 2023. 4. 24.
반응형

logical array를 만들어 내는 함수 중 하나인 strcmp는 두개의 문자열을 비교하여 둘이 동일하면 1(true)을 반환하고, 동일하지 않으면 0(false)을 반환하는 함수이다.

 

다음과 같은 코드를 실행해보면 논리값 1이 나오는 것을 알 수 있다.

 

s1 = 'Yes';
s2 = 'No';
tf = strcmp(s1,s2)

 

(PS. 방금 코드블럭이란 것을 알았다....)

 

겉보기엔 두개의 문자열이 같냐 다르냐만 비교할 수 있어보이지만 이 함수는 문자형 벡터로 구성된 셀형 배열과 하나의 문자열을 넣으면 동일한 문자열을 가진 인덱스에 true를 반환하는 logical array를 만들어낸다.

 

 

 

 

 

무슨소린지 긴가민가 하니 예시를 들어보자.

 

s1 = {'O2', 'N2', 'O', 'N', 'CO2'};
s2 = 'N';
tf = strcmp(s1,s2)

 

{}는 셀형 배열을 나타내고, 배열의 성분은 각각 문자열을 가지고 있다.

 

셀형 배열에서 문자열과 'N'이라는 문자열을 비교하여 logical array를 만들어 낼 수 있다. 

 

즉, 'N'과 정확히 일치하는 4번째 성분에 1(true)를 반환하는 logical array를 얻을 수 있다.

 

 

 

 

 

이 logical array로 행렬에서 원하는 값을 얻어낼 수 있다.

 

s1과 동일한 순서로 각 원소의 분자량을 나타내는 행렬을 만들고, s3(tf)를 실행해보자.

 

s1 = {'O2', 'N2', 'O', 'N', 'CO2'};
s2 = 'N';
tf = strcmp(s1,s2);

s3 = [32 28 16 14 44];
s3(tf)

 

s3(tf)를 함으로써 tf의 1이었던 성분의 인덱스에 해당하는 s3의 값이 나온 것을 확인할 수 있다.

 

따라서 우리가 원하는 문자를 대입하면 그에 해당하는 분자량을 얻을 수 있는 함수를 만들 수 있는 것이다.

 

 

 

 

자, 이제 이걸 활용해서 원하는 원소를 입력하면 분자량을 나오게 하는 함수를 만들어 보자.

 

ANS=Input_Molecular('O2')

function Molecular_Weight = Input_Molecular(input)

s1 = {'O2', 'N2', 'O', 'N', 'CO2'}; % 이름
s2 = [32 28 16 14 44];              % 분자량

tf = strcmp(s1,input);

Molecular_Weight = s2(tf);
end

 

s1의 문자열 중 하나를 입력하고, strcmp를 이용하여 logical array tf를 만들고, 이를 s2 행렬에 대입하여 분자량을 얻는 함수가 생성되었다.

 

이 코드를 실행해 'O2'에 대한 분자량을 ANS 변수로 저장하면 다음과 같은 결과가 나온다.

 

 

 

이렇게 strcmp를 활용해서 재료의 이름과 값을 저장하면, 재료를 입력했을때 원하는 값을 얻을 수 있는 함수를 만들 수 있다.

 

여기서 대문자, 소문자 구별을 하지 않고 일치하는 logical array를 얻고 싶으면, strcmpi 함수를 이용하여 해결 할 수 있다.

반응형

댓글