2017-01-27 4 views
0

Мне нужно заполнить этот массив через подсказку пользователя. Я думал, чтобы прочитать в пользовательской записи строку, а затем назначить эту строку массиву, но это, похоже, не подходит для этого. Может ли кто-нибудь помочь мне?заполнение массива символов строкой? C++

Ошибка я получаю Считывает «массив типа массива [100] не может быть назначен»

#include <iostream> 
    #include <cstdlib> 
    #include <ctime> 
    #include <string.h> 

    using namespace std; 

    int main() 
    { 
     string theString; 

     char array[100]; // ARRAY MAX SIZE 

     int length = sizeof(array)-1; 
     char * ptrHead = array; 
     char *ptrTail = array + length - 1; 


     //USER PROMPTS & ARRAY FILL 
     cout << "Please enter a string to be reverse: " << endl; 
     cin >> theString; 
     array= theString; 

     //WHILE LOOP SWAPPING CHARACTERS OF STRING 
     while (ptrHead < ptrTail) 
     { 
      char temp = *ptrHead; 
      *ptrHead = *ptrTail; 
      *ptrTail = temp; 

      ptrHead++; 
      ptrTail--; 
     } 

     cout << array << endl; 

     return 0; 
    } 

ответ

1

cin >> array; должен поставить вход непосредственно в массив, который я предполагаю, что это то, что вы хотите

Кроме того, в вашей логике разворота строк есть проблема. Вы меняете весь массив, а не только ту часть, которая была заполнена, и она будет заполнена в конце массива. Рассмотрите возможность использования функции, например strlen(), чтобы узнать, как долго находится фактический вход.

0

массивы не могут быть назначены. Вы должны использовать strcpy здесь:

Но для этого вам нужно будет преобразовать theString в C как строку.

strcpy(array, theString.c_str()); 

Затем настройте ваш ptrTail указатель тоже, как следующее:

int length = theString.size(); 
char *ptrTail = array + length - 1; 

See Here

+0

Это компилируется и работает в настоящее время, однако он ISN» t больше меняет строку. – user7472073

+0

@ user7472073 Посмотрите ссылку в моем сообщении – P0W

+0

О, я вижу. Спасибо! – user7472073

0

Вы можете скопировать string в массив с strcpy или вводить данные непосредственно в массив с cin >> array, но лучшим решением было бы просто не использовать массив char, просто используйте string в своем алгоритме. Это также лучшее решение, потому что вы можете переполнить фиксированный размер char массиву

cout << "Please enter a string to be reverse: " << endl; 
cin >> theString; 

for (unsigned int i = 0; i <= theString.size()/2; ++i) 
    swap(theString[i], theString[theString.size() - 1 - i); 

cout << theString<< endl; 

Редактировать

Те же, используя указатели:

std::cout << "Please enter a string to be reverse: " << std::endl; 
std::cin >> theString; 

char* i = &theString[0]; 
char* j = &theString[theString.size() - 1]; 
for (; i < j; ++i, --j) 
    std::swap(*i, *j); 

std::cout << theString << std::endl; 
+0

Мы были явно запрошены указателями пользователя. Это маршрут, который я бы ушел, если бы это было не обязательно. Спасибо хоть! – user7472073

+0

@ user7472073 - Вы все еще можете использовать указатели для изменения строки. Проблема в том, что вы использовали массив символов для ввода данных. – PaulMcKenzie

+0

@ user7472073 см. Редактировать – FamZ

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