2016-10-06 25 views
2

私はC++の初心者です。文字列を文字列として配列に入力したいので、逆関数を実装することができます。ただし、 n 'はストリームに組み込まれていません。どのようにデータの入力を停止できますか?配列へのC++ Cin入力

私のコードは次のとおりです。

#include<iostream> 
#include<array> 
#define SIZE 100 
using namespace std; 

char *reverse(char *s){ 
array<char, SIZE>b; 
int c=0; 
for(int i =(SIZE-1);i>=0;i--){ 
    b[i] = s[c]; 
    c++; 

    } 

return s; 
} 

int main(){ 

cout<<"Please insert a string"<<endl; 
char a[SIZE]; 
int i=0; 
do{ 
cin>>a[i]; 
i++; 
}while(a[i-1]!= '\0'); 


reverse(a); 

return 0; 
} 
+0

なぜ 'のstd :: STRING'に直接読んでいませんか? –

+0

あなたの逆関数は何をすべきですか?私はあなたに正しい質問をしていないと思います – Treycos

+0

私はそれを文字列に読み込んで解決しました。そして文字列の長さを知っていました。私はそれをループで反転しました。ありがとうすべて –

答えて

4

あなたは文字で文字を読んだとき、それは本当に文字を読み込み、改行は空白文字と考えられています。

また、配列は決してCスタイルの文字列として終了することはありません。これは、文字の読み方とは異なります。つまり、ループ条件が間違っていることを意味します。

まず、std::stringを文字列に使用することをお勧めします。あなたはまだ文字で読むことができます。続行するには、あなたが実際に読み込んだ文字を確認し、改行を読み終えたら読み終わる必要があります。

最後に、reverse機能が動作しません。まず第一に、ループ自体が間違っています。次に、ポインタを元の文字列に戻します。逆の配列ではありません。


それはthe answer by Stack Dannyに示すように、こののあまりいないが、本当に必要とされていることに注意してください

std::string str; 
while (true) 
{ 
    char ch; 
    std::cin >> ch; 
    if (ch == '\n') 
    { 
     break; // End loop 
    } 

    str += ch; // Append character to string 
} 

ような何かを行うことができる読んであなたを助けるために。上記のコードでも、一度に1文字を読みながら簡単にすることができます。

+0

これはなぜ機能しませんか? #include #include #define SIZE 100 using namespace std; char * reverse(char * s){ array b; int c = 0; (int i =(SIZE-1); i> = 0; i - ){ b [i] = s [c]; ; C++; } return s; } int main(){ cout << "文字列" << endlを挿入してください。 char a [SIZE]; int i = 0; do { cin >> a [i]; i ++; while(a [i-1]!! )= '\ 0'); reverse(a); return 0; } –

+0

@DylanGaleaまず、 'a'の要素を' '\ 0''に設定する声明はありません。デバッガの使い方を学び、変数とその値を監視しながらコードを1行ずつ進める方法を学びます。 –

4

C++Cではなく)という質問にタグ付けしたので、現代のC++ヘッダーで実際に解決してみませんか?(テストし、テストし、保存し、機能します。

#include <string> 
#include <algorithm> 
#include <iostream> 

int main(){ 
    std::string str; 
    std::cout << "Enter a string: "; 
    std::getline(std::cin, str); 

    std::reverse(str.begin(), str.end()); 

    std::cout << str << std::endl; 

    return 0; 
} 

出力:

Enter a string: Hello Test 4321 
1234 tseT olleH 
関連する問題