好的,我一直在寻找各处,我找不到合适的方法来做到这一点。我只想接受一个字符串,将该字符串放入数组并输出内容。但是,我想这取决于用户输入的字符串的大小。我得到了不兼容的奇怪错误,我想知道为什么请,谢谢。
#include <iostream>
#include <array>
#include <string>
using namespace std;
int main()
{
int x = 4000;
string y;
cout << "Enter value";
getline(cin, y);
array<char, strlen(y)>state;
for(int i=0; i<strlen(y); ++i)
cout << state[i] << ' ';
system("PAUSE");
return 0;
}
答案 0 :(得分:2)
std::array
需要编译时大小,因此无法使用strlen
进行实例化。此外,strlen
不能与std::string
一起使用,它需要指向char
的指针,指向空终止字符串的开头。
您可以改为使用std::vector<char>
:
std::string y;
std::cout << "Enter value";
std::getline(std::cin, y);
std::vector<char> state(y.begin(), y.end());
for(int i = 0; i < state.size(); ++i)
std::cout << state[i] << ' ';
另一方面,为什么不直接使用string
y
?你真的需要“阵列”吗?
for(int i = 0; i < y.size(); ++i)
std::cout << y[i] << ' ';
答案 1 :(得分:0)
我希望它会起作用..
#include "stdafx.h"
#include <iostream>
#include <array>
#include <string>
using namespace std;
int main()
{
int x = 4000;
string y;
cout << "Enter value";
getline(cin, y );
char *b = new char[y.length()];
int j=y.length();
//array< char, strlen(y)>state;
for( int i = 0; i<j; ++ i )
{//whatever uu want
}
//cout << state[i] << ' ' ;
system( "PAUSE" );
return 0;
}
答案 2 :(得分:0)
std :: array是围绕C静态数组的包装器模板类。这意味着必须在构建时(而不是运行时)知道它的维度。
这是一个工作代码的简短版本,由于string :: length()被调用一次,所以也快一点。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string y;
cout << "Enter value";
getline(cin, y );
for( size_t i = 0, yLen = y.length(); i < yLen; ++i )
cout << y[i] << ' ';
system( "PAUSE" );
return 0;
}
如果您喜欢指针技巧并利用字符串的缓冲区在内存中连续(通过C ++标准),您的代码可能如下所示:
int main()
{
string y;
cout << "Enter value";
getline(cin, y );
for( const char* p = &y[0]; *p; ++p )
cout << *p << ' ';
system( "PAUSE" );
return 0;
}