Oct-File에서의 문자열
Oct-File에서의 문자열 (Character Strings in Oct-Files)
oct-file 안에서 문자열을 다루는 건 생각보다 간단해요. Octave에서 문자열은 그냥 특별한 Array 클래스일 뿐이거든요. 단일 따옴표 문자열과 이중 따옴표 문자열의 차이를 어떻게 다루는지 Appendix A.1.3절을 정리해 볼게요.
본문
Octave에서 문자 문자열은 그냥 특별한 Array 클래스예요. 다음 예시를 보죠.
#include <octave/oct.h>
DEFUN_DLD (stringdemo, args, , "String Demo")
{
if (args.length () != 1)
print_usage ();
octave_value_list retval;
charMatrix ch = args(0).char_matrix_value ();
retval(1) = octave_value (ch, '\''); // Single Quote String
octave_idx_type nr = ch.rows ();
for (octave_idx_type i = 0; i < nr / 2; i++)
{
std::string tmp = ch.row_as_string (i);
ch.insert (ch.row_as_string (nr-i-1).c_str (), i, 0);
ch.insert (tmp.c_str (), nr-i-1, 0);
}
retval(0) = octave_value (ch, '"'); // Double Quote String
return retval;
}
이 함수를 사용하는 예시는 다음과 같아요.
s0 = ["First String"; "Second String"];
[s1,s2] = stringdemo (s0)
⇒ s1 = Second String
First String
⇒ s2 = First String
Second String
typeinfo (s2)
⇒ sq_string
typeinfo (s1)
⇒ string
Octave에서 문자열의 한 가지 추가적인 복잡함은 단일 따옴표 문자열과 이중 따옴표 문자열의 차이예요. octave_value가 단일 따옴표 문자열인지 이중 따옴표 문자열인지 알아내려면 아래에 보이는 판별(predicate) 검사 중 하나를 쓰면 됩니다.
if (args(0).is_sq_string ())
octave_stdout << "First argument is a single quoted string\n";
else if (args(0).is_dq_string ())
octave_stdout << "First argument is a double quoted string\n";
다만 두 문자열 유형 모두 charNDArray 타입으로 표현된다는 점을 유의하세요. 그래서 octave_value에 할당할 때는 문자열의 유형을 지정해야 합니다. 예를 들어,
octave_value_list retval;
charNDArray ch;
...
// Create single quoted string
retval(1) = octave_value (ch); // default constructor is sq_string
OR
retval(1) = octave_value (ch, '\''); // explicitly create sq_string
// Create a double quoted string
retval(0) = octave_value (ch, '"');
더 알아보기
- octave-external-code-interface — 외부 코드 인터페이스 개요
- octave-mex-files — mex-파일 인터페이스
- octave-strings — Octave 스크립트에서의 문자열