2010-04-26 9 views
0

내 작업은 두 부분으로 구성됩니다. 먼저 100 요소의 globbal char 배열을 만들고 cin을 사용하여 일부 텍스트를 삽입해야합니다. 그 다음 문자의 양을 계산하고, 입력 된 텍스트의 길이로 전용 배열을 만듭니다. 나는 다음과 같은 솔루션에 대해 생각했다 :동적으로 생성 된 배열

char[100]inputData; 

int main() 
{ 

    cin >> inputData >> endl; 

    int length=0; 
    for(int i=0; i<100; i++) 
    { 
      while(inputData[i] == "\0") 
      { 
       ++count; 
      } 
    } 
char c = new char[count]; 

오전 내가 좋은 생각? 태스크

번째 부분은 동적으로 삽입 된 모든 단어 포인터 배열을 생성 제 프로그램에 도입하는 것이다. 새 단어를 추가하면 이전 단어가 모두 인쇄되고 다음 단어를위한 공간이 없으면 inputData 배열의 크기를 두 번 증가시켜야합니다. 그리고 솔직히 말해서 이것은 나에게 너무 비싸다. 단어에 대한 포인터를 구체적으로 만들 수있는 방법은 무엇입니까? 그리고 전역 배열의 내용을 잃어 버리지 않고 그 크기를 어떻게 늘릴 수 있습니까? 임시 배열로? 그들은 당신이 그들을 삭제하고 재 할당 할 수있는 경우 배열에 대한 포인터가 아니라면

+3

이 숙제가 있습니까? –

+0

"내 작업은 두 부분으로 구성되어 있습니다. 먼저 100 개 요소의 전역 문자 배열을 만들어야합니다."- 아니요,이 작업을 거의 수행 할 필요가 없습니다. –

+0

@ 톰 : 물론 그렇게되기를 바랍니다. 그렇지 않으면 완전히 미친 것입니다 (심지어 숙제로도 조금 의심 스럽습니다). –

답변

2

에 관계없이 귀하의 질문의 나머지, 당신은 while 루프에 대한 몇 가지 잘못된 생각을 가지고있는 것 같습니다. 이 코드를 살펴 보겠습니다.

for(int i=0; i<100; i++) { 
    while(inputData[i] == "\0") { 
     ++count; 
    } 
} 

먼저 "\0"은 NUL 문자가 아닙니다. 이것은 종료 NUL 바이트 만 포함하는 문자열에 대한 포인터입니다. 대신 '\0'을 원합니다. 이 변화를 가정하면 여전히 문제가 있습니다. 무슨 일이 일어나는지 생각해 봅시다.

  • while 루프는 어떻게 작동합니까? 조건이 true 인 동안 본체를 반복적으로 실행합니다.
  • 언제 while 루프가 끝나나요? 시체를 실행하여 조건이 거짓이 될 때
  • 루프의 조건은 무엇입니까? inputData[i] == '\0', 수정 후.
  • 시체는 무엇입니까? ++count.
  • ++count은 조건 값을 변경할 수 있습니까? 아니, 변경되지 않기 때문에 i. inputData[i]이 NUL 바이트가 아닌 경우
  • 그래서,의 while 루프는 실행하지 않습니다. inputData[i]가 NUL 바이트 인 경우
  • 하지만, 상기 루프 while 영원히 행한다. 당신이 inputData에 적절한 문자열을 읽은 가정
  • 후 어느 시점 inputData[i]에 NUL 될 것입니다, 당신은 무한 루프를해야합니다.

는 수행 표준 C 문자열의 길이를 계산하려면이

count = strlen(inputData); 

만약 어떤 이유로 당신 정말 다음 루프, 다음 작품을 쓸 필요가 :

int len = 0, 
while (inputData[len] != '\0') { 
    len++; 
} 

루프가 끝난 후 len은 문자열의 길이를 유지합니다.

+0

아니요. 그것이라고하면 할 수 있습니다! = '\ 0' – pm100

+0

와우. 수정할 수정. –

0

글로벌 배열의 크기는 동적으로 변경할 수 없습니다.

아마도 당신이 후있어하는 것은 표준 : : 벡터와 같은 자동 크기 조정 배열입니다. 벡터에서 size()를 호출하여 배열에있는 문자 수를 볼 수 있으며 resize()를 호출하여 배열의 크기를 늘릴 수 있습니다.

가장 세련된 솔루션은 아니지만 지금은 사용하기가 다소 쉬울 수 있습니다.

1
#include <iostream> 
#include <string> 

int main() 
{ 
    std::string input; 
    std::getline(std::cin, input); 
} 
관련 문제