2012-04-18 2 views
0

제목에서 볼 수 있듯이 구조체 벡터에서 작업하고 있습니다.C++ : 구조체 멤버 (벡터에있는 구조체)에 데이터를 삽입하는 방법

구조체 멤버 중 하나가 문자열 단어입니다. 이 방법으로이 멤버에 데이터를 입력하려고 할 때 : (* iv) .word = temp_str;, 런타임 오류가 발생합니다.

while (is!=str1.end()) 
{ 
    if (((*is)!='-')&&((*is)!='.')&&((*is)!=',')&&((*is)!=';')&&((*is)!='?')&&((*is)!='!')&&((*is)!=':')) 
    { 
     temp_str.push_back(*is); 
     ++is; 
    } 
    else 
    {   
     (*iv).word=temp_str; 
     ++iv; 
     str1.erase(is); 
     temp_str.clear(); 
    } 
} 

이것은 관련 코드 간격 일 수 있습니다.

say- word와 temp_str은 문자열 유형이어야합니다. iv는 벡터의 반복자입니다.

이 경우 구조체 멤버에 데이터를 입력하는 올바른 방법은 무엇입니까?

+0

후 당신이 당신의 벡터를 초기화하려면 어떻게 temp_str –

+0

을 할당 할 몇 가지 코드를 작동해야 무엇인가? 어떻게 벡터를 반복합니까? 관련 코드 조각을 제공하십시오 – giorashc

+0

@iammilind, 아무도 영어가 사용되지 않는 나라에서 태어 났을 경우에 한합니다. –

답변

2

이터레이터는 아마도 유효하지 않을 것입니다. 그렇지 않으면 한 문자열을 다른 문자열에 할당 할 때 문제가되어서는 안됩니다.

str1.erase(is); 

is 무효화됩니다, 당신은 아마로 변경해야합니다 :

하나의 문제는 라인

에서 iv 점을 무엇
is = str1.erase(is); 

? 같은 것을 추가 할 필요가있는 것 같습니다 :

while (is!=str1.end() && iv != something.end()) 

도 있습니다.

1

iterator 또는 벡터 공간을 할당하는 데 문제가 있다고 생각합니다. 여기

#define N 10 

struct myStruct 
{ 
    int a; 
    std::string str; 
}; 

int main() 
{ 
    std::vector<myStruct> myVector; 
    myVector.resize(N); 
    std::vector<myStruct>::iterator itr;  
    for (itr = myVector.begin(); itr != myVector.end(); ++itr) 
    { 
     std::string tmp = getString(); 
     itr->str = tmp; 
    } 
    return 0; 
} 
+0

벡터 크기를 알 수 없을 때 당신의 솔루션은 무엇입니까? – adamco

+0

글쎄, 정말로 당신이하고 싶은 일에 달려 있습니다. 빈 문자열이나 끝난 것을 알 수있을 때까지 루프에서 vector의 push_back 메소드를 사용할 수 있습니다. –

관련 문제