2017-01-27 8 views
0

私はこのプロンプトをユーザプロンプトから入力する必要があります。私はユーザーエントリを文字列に読み込んでその文字列を配列に割り当てることを考えていましたが、これはこれにアプローチする正しい方法ではないようです。誰かが私を助けてくれますか?文字配列に文字列を埋めますか? C++

私が受けてるエラーが

#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;「配列型配列[100]が割り当て可能ではありません」と書かれ、私は推測している配列、に直接入力を入れなければならない何をしたい

です

また、文字列の反転ロジックに問題があります。塗りつぶされた部分だけでなく、配列全体を逆にして、塗りつぶした部分を配列の最後に配置します。実際の入力の長さを調べるには、strlen()のような関数を使用することを検討してください。

0

配列は割り当てできません。ここでstrcpyを使用してください:

しかし、これはtheStringをCのような文字列に変換する必要があります。

strcpy(array, theString.c_str()); 

は、その後、次のように、あまりにもあなたのptrTailポインタを調整します

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

See Here

+0

これは、コンパイルして、今動いている、しかしそれはにISNもう文字列を逆にします。 – user7472073

+0

@ user7472073私の記事のリンクを参照してください – P0W

+0

ああ、私は参照してください。本当にありがとう! – user7472073

0

あなたがcin >> arrayを直接配列にstrcpyまたは入力データを配列にstringをコピーすることができ、より良い解決策は、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 - ポインタを使用して文字列の逆転を行うことはできます。問題は、データを入力するためにchar配列を使用したことです。 – PaulMcKenzie

+0

@ user7472073を参照してください編集 – FamZ