Функция strlen несовместима с циклом, переменная цикла несовместима

Хорошо, я искал везде, и я не могу найти правильный способ сделать это. Я просто хочу взять строку, поместить эту строку в массив и вывести содержимое. Однако я хочу сделать это в зависимости от размера строки, в которую вводит пользователь. И я получал странные ошибки, такие как несовместимость, и я хотел бы знать, почему, пожалуйста, спасибо.

#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

Решение

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] << ' ';
2

Другие решения

std :: array является классом шаблона оболочки вокруг статического массива Си. Это означает, что его размеры должны быть известны во время сборки (а не во время выполнения).

Вот короткая версия рабочего кода, которая также немного быстрее, так как 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;
}
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;
}
0
По вопросам рекламы [email protected]