2013-10-12 6 views
-1

динамические массивы известны позволяя хранить строку или любой тип данных без необходимости объявлять его размер проблема, что я столкнулся с моей C++ заключается в следующем:C++ динамические задачи массива

#include<iostream> 
#include<cstring> 
using namespace std; 
int main() 
{ 
char*sentence=new char; 
cout<<"enter a sentence (end with *) : "; 
cin.getline(sentence,'*'); 
cout<<"sentence : "<<sentence<<endl; 
system("pause"); 
return 0; 
} 

в cin.getline не останавливается на символе '*', поэтому предел будет установлен, когда я нажму кнопку enter. , но если я хочу использовать только ключ возврата он будет читать первые 9 символов строки:

int main() 
    { 
     char*sentence=new char; 
     cout<<"enter a sentence : "; 
     cin.getline(sentence,'\n'); 
      cout<<"sentence : "<<sentence<<endl; 
     system("pause"); 
     return 0; 

    } 

, но он будет работать только, если я ограничить количество символов:

int main() 
{ 
char*sentence=new char; 
cout<<"enter a sentence : "; 
cin.getline(sentence,100,'*'); 
system("pause"); 
return 0; 
} 

но Я хочу, чтобы пользователь вводил предложение без ограничений, как это сделать, не устанавливая количество символов в cin.getline и не объявляя динамический массив.

+1

выделить буфер достаточно большой, чтобы держать вход. Что-то вроде 'char * sentence = new char [1000];' – sgarizvi

+1

использовать 'std :: string'. Все остальное отстой. – Walter

ответ

3
std::string line; 
std::getline(std::cin, line); 

Вам никогда не придется беспокоиться о хранении в std::string, он работает все это для вас. Кстати, new char; не создает динамический массив char s, он создает указатель только на один char. Также см. getline.

1

char* sentence=new char ; выделяет один char

Использование:

char* sentence=new char[100];

+0

в C++, используйте 'std :: string' – Walter

Смежные вопросы