2014-03-07 1 views
0

첫 번째 부분에서 사용자에게 문자열 입력을 요구하는 지정 작업을 수행하고 있습니다. 이 입력을 힙에 cstring으로 저장해야합니다 (std :: string이 아닌 cstring을 더 잘 이해할 수 있도록). 나는 잘 작동 뭔가 가지고있다 :Cstring으로 C++ 스토어 문자열 입력

char *input = new char[500]; 
cout << "enter a string: "; 
cin.getline(input, 500); 

을하지만 난이 (500)의 배열을 생성하고이 문자 제한을 초과하지 않는 희망에 관해서는 그것을 할 수있는 아주 좋은 방법이 아닌 것 같은 느낌. 말도 안되게 큰 배열을 만들지 않고 이렇게 할 수있는 방법이 있습니까? 이것은 그것에 대해가는 아마추어적인 방법으로 보인다. std :: string 사용할 수 있다고 생각하지만 cstring 사용해야합니다 : (

+0

당신이 '돈 힙이가해야 공간의 어떤 양을 알 방법 다음 크기를 지정하는 경우와 그 배열에 배열과 포인트를 찍어서 캐릭터? 여기에 500자를위한 공간을 할당하고이 공간이 다른 앱에 의해 인계받지 않도록하십시오. –

+0

'std :: string' 방법은 작은 버퍼를 할당 한 다음 다시 채우고 복사하면 다시 채울 수 있으며 더 이상 읽을 문자가 없을 때까지 여러 번 반복하여 다시 할당 할 수 있습니다. 이런 방식으로 구현할 수도 있지만 문제가되지는 않습니다. 오늘날에는 500 바이트가별로 공간이 없습니다. – Brian

+1

'std :: string'은 자동으로 크기가 맞으므로 분명히 사용하기가 훨씬 쉽습니다. 일반적으로 여러분이 한 방식은 입력의 크기에 대해 충분히 알지 못해도 더 정확하게 수행 할 수있는 방법입니다. 전체 공간을 절약하려면 버퍼를 채운 다음 크기를 찾고 그 크기의 다른 배열을 만들고 해당 배열에 버퍼를 복사 한 다음 버퍼를 할당 해제합니다. – IllusiveBrian

답변

1

C 방법은 malloc 함께 버퍼를 할당 할 수, 적절한 바이트 수를 읽고 전체 문자열 . 당신은 충분히 읽을하지 않은 경우, 당신은 버퍼를 확장하고 중단 한 부분 자세한 내용을 realloc을 사용할 수 있습니다

0

을 우리는 다음과 같이 수행 할 수 있습니다. 동적 STRING을 구축 자신을 버퍼

  1. . 힙 메모리를 할당하십시오. (80이면 충분합니다.)
  2. 입력을 직접 제어 할 수 있습니다. inpu에서 한 문자 만 읽을 수 있습니다 t 때마다 스트림.이 문자가 포함 된 메모리의 크기가 충분하지 않으면 그냥 충분히 다른 하나를 할당하십시오.
  3. 문자 '\ n'(또는 다른 문자)를 읽으면 그만 읽으십시오.

예, 이것이 C++ 라이브러리의 기능입니다. 버퍼는 실제로 대기열입니다.

0

C++ 성능 향상을 ... 그래서 이것은 포인터

#include <cstring> 
#include <iostream> 
#include <string> 
#include <stdio.h> 
using namespace std; 

int main() 
{ 
char name[100]; 
//string userInput[26]; 
int i=0, n=0; 
cout<<"your name? "; 
cin>>name; 
cout<<"Hello "<<name<< endl; 

char *ptr=name; 
for (i = 0; i < 20; i++) 
{ 
cout<<i<<" "<<ptr[i]<<" "<<(int)ptr[i]<<endl; 
} 
int length = 0; 
while(name[length] != '\0') 
{ 
    length++; 
    } 

      for(n=0; n<3; n++) 
        { 

       if (strncmp(ptr, "r2d2", 4) == 0) 
        { 
        cout << "you found r2d2bob" << ptr[i]; 
        } 

     } 
cout<<name <<"is"<<length<<"chars long"; 
}