문자열 + i를 연결하는 방법?


78
for i=1:N
   f(i) = 'f'+i;
end

MatLab에서 오류가 발생합니다. 패턴 fi의 N 문자열로 배열을 초기화하는 올바른 구문은 무엇입니까?

이것이 작동하지 않는 것 같습니다.

for i=1:4
  f(i) = 'f';
end

어레이가 정확히 어떻게 f보이기 를 원 하십니까? 모든 개별 fi문자열이 함께 연결된 단일 문자열 ? 행당 하나의 문자열이있는 문자 배열? 셀형 배열?
gnovice

최신 버전의 MATLB의 경우 문자열을 사용하십시오. 예를 들어 "asd" + (1:5)작동합니다.
bonanza

답변:


117

를 사용하여 문자열을 연결할 수 있습니다 strcat. 숫자를 문자열로 연결하려는 경우 먼저를 사용 num2str하여 숫자를 문자열로 변환 해야합니다 .

또한 문자열은 벡터 또는 행렬에 저장할 수 없으므로 셀형 배열f 로 정의 해야하며 일반 대괄호 대신 및 및를 사용하여 인덱싱해야합니다 .{}

f = cell(N, 1);
for i=1:N
   f{i} = strcat('f', num2str(i));
end

10
"f (i) = sprintf ( '% s % d', f, i);" 잘 작동합니다.
telenachos 2011

내 문제는 인덱싱에 중괄호를 사용하지
않았다는 것입니다

10
['f', num2str(i)]조금 더 짧습니다.
Oli

24

R2014a 이전 버전의 경우 ...

한 가지 쉬운 비 루프 접근 방식은 문자열로 genvarname구성된 셀형 배열 을 만드는 데 사용 하는 것 입니다.

>> N = 5;
>> f = genvarname(repmat({'f'}, 1, N), 'f')

f = 

    'f1'    'f2'    'f3'    'f4'    'f5'

최신 버전의 경우 ...

이 함수 genvarname는 더 이상 사용되지 않으므로 matlab.lang.makeUniqueStrings다음 방법으로 대신 사용하여 동일한 출력을 얻을 수 있습니다.

>> N = 5;
>> f = strrep(matlab.lang.makeUniqueStrings(repmat({'f'}, 1, N), 'f'), '_', '')

 f =
   1×5 cell array

     'f1'    'f2'    'f3'    'f4'    'f5'

이것은 실제로 훌륭한 솔루션입니다. 나는 몰랐습니다 genvarname.
Mansoor Siddiqui 2011

참고 : genvarname더 이상 사용되지 않습니다.
Czechnology

9

다른 솔루션을 추가하겠습니다.

>> N = 5;
>> f = cellstr(num2str((1:N)', 'f%d'))
f = 
    'f1'
    'f2'
    'f3'
    'f4'
    'f5'

N가 세 자리 ( >= 10) 이상 이면 추가 공백이 생기기 시작합니다. strtrim(f)제거 하려면 에 전화를 추가 하세요.


보너스 sprintfc로 문자열의 셀형 배열을 멋지게 반환 하는 문서화되지 않은 내장 함수 가 있습니다.

>> N = 10;
>> f = sprintfc('f%d', 1:N)
f = 
    'f1'    'f2'    'f3'    'f4'    'f5'    'f6'    'f7'    'f8'    'f9'    'f10'

4

사용 sprintf은 이미 ldueck이 의견에 제안했지만 대답 할 가치가 있다고 생각합니다.

f(i) = sprintf('f%d', i);

이것은 제 생각에 가장 읽기 쉬운 솔루션이며 또한 약간의 유연성을 제공합니다 (즉, float 값을 반올림하려면 다음과 같은 것을 사용하십시오 %.2f).


2

에 따라 당신이 "N"으로 설정해야처럼 그것을 사용하기 전에보고 그것이 INT하지 문자열이 될 필요 것 같습니다? MatLab에 대해 많이 알지는 못하지만 그 사이트에서 수집 한 내용은 도움이 되었으면합니다. :)


2

다음을 시도하십시오.

for i = 1:4
    result = strcat('f',int2str(i));
end

코드가 생성하는 여러 파일의 이름을 지정하는 데 이것을 사용하면 이름에 더 많은 부분을 연결할 수 있습니다. 예를 들어, 확장자가 끝에 있고 주소가 시작에있는 경우 :

filename = strcat('c:\...\name',int2str(i),'.png'); 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.