私はc ++の初心者であり、文字列を1文字ずつ配列に入力して、リバース関数を実装できるようにしたいと思います。ただし、Cとは異なり、Enterキーを押すと '\ n'がストリームに挿入されません。 ..データの入力を停止するにはどうすればよいですか?
私のコードは:
#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;
}
1文字ずつ読み取ると、実際にはcharactersが読み取られ、改行は空白character。
また、配列がCスタイルの文字列として終了することは決してありません。それは、文字の読み取りが機能する方法ではありません。つまり、ループ条件が間違っています。
まず、文字列にstd::string
を使用することをお勧めします。それでも、文字を1文字ずつ読み取ることができます。続行するには、実際に読んだ文字を確認し、改行を読んだら読み終える必要があります。
最後に、reverse
関数が機能しません。まず最初にループ自体が間違っています。次に、「逆」配列ではなく、元の文字列へのポインタを返します。
読書を助けるために、それは次のようなことができます
std::string str;
while (true)
{
char ch;
std::cin >> ch;
if (ch == '\n')
{
break; // End loop
}
str += ch; // Append character to string
}
Stack Dannyによる回答 に示されているように、実際にはそれほど必要ではないことに注意してください。上記の私のコードでさえ、一度に1文字ずつ読み取りながら簡略化できます。
質問に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