2010-02-12 1 views
0

Хорошо, ребята, я очень новичок и пытаюсь ввести строку в массив символов с помощью указателей .. и затем отобразить написанное.Ввод строки символов с использованием массивов и указателей

Есть две вещи, о которых я хочу спросить. Во-первых, если я не хочу указывать размер массива и просто хочу, чтобы он расширялся, чтобы содержать всю строку, в которую я ввел .. так? И второй после того, как я ввешу строку и покажу ее ... он не будет содержать пробел между словом ... нравится, если бы я ввел «я люблю куки» ... он будет отображаться как «ilovecookies» .. So как это решить?

Вот мой маленький код ...

#include <iostream> 

using namespace std; 

int main() 
{ 

    char *strP , str[100] ; 
    strP = str ; 

    for(int i =0 ; i<10 ; i++) cin >> *(strP+i) ; 

    for(int i =0 ; i<10 ; i++) cout << *(strP+i) ; 


    return 0; 
} 

извините за мои глупые вопросы, я новичок на этом языке, как сказал и не хотите пропустить вещи, прежде чем двигаться дальше.

Заранее спасибо.

ответ

1

1) Вам нужно либо использовать строковый объект, либо new, если вы хотите динамически изменять размер строки.

2) Он не содержит пробелов, потому что cin читает по одному слову за раз. Есть несколько способов обойти это. Тот, который я бы использовал, переключается на использование scanf и printf вместо cin и cout. Или, как сказал vivin, вы можете использовать GetChar()

EDIT: грамматика

+0

Используйте getline для обработки ввода с пробелами в нем. Не используйте scanf и printf, если у вас нет лучшей причины; они используют varargs, поэтому компилятор не может поймать ошибки типа для вас, и они являются источником ошибок переполнения буфера. –

1

cin всегда останавливается, когда сталкивается с пробелом. Если вы вводите символ по символу, попробуйте использовать getchar().

1

Массивы не может изменить их размер. Вы должны использовать std::vector<char>, или даже лучше для строк, которые вы использовали бы std::string.

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