2012-07-13 6 views
0
#include<iostream> 
#include<string> 
using namespace std; 
int main(void) { 

    struct STRCT { 
     int num; 
     string str1, 
       arrStr1[], 
       str2, 
       arrStr2[]; 
    }; 

    int a; 
    string b[2], 
      c[3], 
      d, 
      e; 

    a = 10; 

    b[0] = "hello"; 
    b[1] = "world"; 

    c[0] = "stack"; 
    c[1] = "over"; 
    c[2] = "flow"; 

    d = "random"; 
    e = "text"; 

    //how do i intialize the arrays (arrStr1[] and arrStr2[]) in aStruct along with the rest of items? 
    //is it like this? 

    //i want aStruct[] to be an array and i want its size to be declared from the start to later be filled with vals 

    STRCT aStruct[2]; 

    //then later in the program i want to assign aStruct[] vals 

    aStruct[0] = {a,  //int 
        d,  //string 
        {b}, //string[] 
        e,  //string 
        {c}}; //string[] 
} 

기본적으로 구조체 배열을 내부에 배열로 만든 다음 올바른 값을 가져 와서 구조체 배열 내부의 배열에 적절한 값을 할당하려고합니다. C에서 도움구조체 내의 문자열 배열 초기화

답변

0

당신에게 사전에 대단히 감사 ++이 "다른 배열로 배열 전체를 복사"어디에도 없습니다

string arr[2] = {"This","is"}; 
string arr1[2]; 

arr1 = arr; 

불법입니다. 배열 요소는 개별적으로 복사해야합니다.

둘째는 알 수없는 크기의 배열을 선언하지 못할

당신은 고정 된 크기의 문자열 배열을 선언하여 구조체 선언을 수정하고이

for(int i =0; i< 2; i++) 
{ 

    aStruct[i].num = a; 
    aStruct[i].str1= d; 

    for(int j=0;j<2;j++) 
    { 
    arrStr1[i] = b[i]; 
    } 

    aStruct[i].str2= e; 

    for(int k=0;k<3;k++) 
    { 
    arrStr2[i] = c[i]; 
    } 
} 

내가 제안 대신 string arrStr1[], string arrStr2[] 할 수있는, b[2]c[2]std::vector을 사용합니다. 이렇게하면 for 루프의 조건을 하드 코딩하지 않아도됩니다.

+0

답장을 보내 주셔서 감사합니다. 다음 주에 배울 때 곧 벡터를 사용할 것입니다. 그래서 직접적으로 arrStr1을 채울 수있는 방법이 없습니다. – Tech

+0

접근 방식을 시도 했습니까? 작동합니까? – Jeeva

+0

컴파일러가 "expect; before {"오류가 발생했습니다 – Tech

3

구조체의 배열 선언은 단순히 불법입니다. C++은 크기가 적은 배열 선언을 클래스 멤버로 지원하지 않습니다. 그리고 일부 C++ 컴파일러가 C99 스타일의 "struct hack"선언을 지원하더라도 size-less 배열은 하나만 허용되며 배열은 struct의 마지막 멤버 여야합니다.

구조체 내부에 배열이 있어야합니다. 특정 컴파일 타임 크기를 지정해야합니다. 특정 컴파일 시간 크기가 없으면 포인터 또는 std::vector을 사용해야합니다.

예에서 b의 크기는 2이고 c의 크기는 3입니다. 동일한 크기

struct STRCT { 
    int num; 
    string str1, arrStr1[2], str2, arrStr2[3]; 
}; 

하여 구조체를 선언하고 일반 배열을 얻을 수있는만큼 지금까지의 그

STRCT aStruct[2] = 
{ 
    { 
    a, 
    d, 
    { b[0], b[1] }, 
    e, 
    { c[0], c[1], c[2] } 
    } 

    // The rest of the array is value-initialized 
}; 

를 다음과 같이 초기화 할 수 있습니다. 더 유연한 무언가를 원한다면 배열을 구조체에 직접 포함 시키면 여기서 도움이되지 않습니다. 필요한 메모리 구조를 수동으로 구성하거나 std::vector을 사용하십시오.

+0

ok ,하지만 마지막으로 arrStr1 []의 크기가 b []의 크기와 같아지기를 원한다면 무엇을 할 것입니까? b []의 크기를 b []의 크기를 손으로 알기 전에 사용자 입력을 사용하여 어떻게 구조체 내부 arrStr1 [(크기의 b)] intialize 것이라고? – Tech