strlen函数与w / loop不兼容,循环变量不兼容

时间:2013-12-03 07:02:20

标签: c++ loops incompatibility

好的,我一直在寻找各处,我找不到合适的方法来做到这一点。我只想接受一个字符串,将该字符串放入数组并输出内容。但是,我想这取决于用户输入的字符串的大小。我得到了不兼容的奇怪错误,我想知道为什么请,谢谢。

#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;
}

3 个答案:

答案 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;
}