C++ Cin 输入到数组
C++ Cin input to array
我是 c++ 的初学者,我想将一个字符串作为一个字符一个字符地输入到一个数组中,这样我就可以实现一个反向函数。但是,与 C 不同的是,当输入被击中时,'\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]!= '[=10=]');
reverse(a);
return 0;
}
一个字符一个字符读的时候,真正读的是个字符,而换行符被认为是一个白色-space 字符 .
此外,数组永远不会作为 C 风格的字符串终止,这不是读取字符的工作方式。这意味着你的循环条件是错误的。
首先,我建议您开始使用 std::string
作为字符串。您仍然可以逐个字符地阅读。要继续,您需要实际检查您阅读了哪些字符,并在阅读换行符后结束阅读。
最后,您的 reverse
功能不起作用。首先循环本身是错误的,其次你 return 指向原始字符串的指针,而不是 "reversed" 数组。
为了帮助您阅读,可以这样做
std::string str;
while (true)
{
char ch;
std::cin >> ch;
if (ch == '\n')
{
break; // End loop
}
str += ch; // Append character to string
}
请注意,如 所示,真正需要的并不多。即使是我上面的代码也可以简化,同时仍然一次读取一个字符。
既然你把你的问题标记为 C++
(而不是 C
),为什么不用现代 C++ headers 实际解决它(它完全符合你的要求,已经过测试,保存和工作真的很快(而不是自己的功能)?
#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
我是 c++ 的初学者,我想将一个字符串作为一个字符一个字符地输入到一个数组中,这样我就可以实现一个反向函数。但是,与 C 不同的是,当输入被击中时,'\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]!= '[=10=]');
reverse(a);
return 0;
}
一个字符一个字符读的时候,真正读的是个字符,而换行符被认为是一个白色-space 字符 .
此外,数组永远不会作为 C 风格的字符串终止,这不是读取字符的工作方式。这意味着你的循环条件是错误的。
首先,我建议您开始使用 std::string
作为字符串。您仍然可以逐个字符地阅读。要继续,您需要实际检查您阅读了哪些字符,并在阅读换行符后结束阅读。
最后,您的 reverse
功能不起作用。首先循环本身是错误的,其次你 return 指向原始字符串的指针,而不是 "reversed" 数组。
为了帮助您阅读,可以这样做
std::string str;
while (true)
{
char ch;
std::cin >> ch;
if (ch == '\n')
{
break; // End loop
}
str += ch; // Append character to string
}
请注意,如
既然你把你的问题标记为 C++
(而不是 C
),为什么不用现代 C++ headers 实际解决它(它完全符合你的要求,已经过测试,保存和工作真的很快(而不是自己的功能)?
#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