Необходимо получить доступ к элементу из части массива строк

Ответил ли этот на ваш вопрос?

Я никогда не использовал reinterpret_cast, и задаюсь вопросом, работает ли он в случае, который ему нужен, это не запах плохого дизайна. В базе кода я работаю над dynamic_cast. Разница с static_cast заключается в том, что dynamic_cast выполняет проверку времени выполнения, которая может (безопаснее) или не может (больше служебных) быть тем, что вы хотите (см. msdn ).

-4
задан demogorgon.net 13 July 2018 в 23:07
поделиться

2 ответа

A string ведет себя по-разному, как массив из char (*). Вам нужно установить print на char тип вместо string, так как вы пытаетесь получить определенный элемент из string. Таким образом, ваш print должен выглядеть так:

char print = temp[0];

(*), но это действительно сложнее.

Вот пример кода что выводит вывод .

1
ответ дан demogorgon.net 17 August 2018 в 12:36
поделиться
  • 1
    Я бы не сказал, что std::string s являются, по существу, массивами char s. Они ведут себя как они в некоторой степени. – einpoklum 13 July 2018 в 14:58
  • 2
    @einpoklum да, это правильно. Я говорю только по существу, потому что на самом базовом уровне это легко понять для кого-то, изучающего c ++. но вы правы :) – demogorgon.net 13 July 2018 в 14:59
  • 3
    Кроме того, почему вы настаиваете, чтобы OP использовала temp.at() вместо temp[0]? Последний является вполне допустимым кодом . – einpoklum 13 July 2018 в 15:03
  • 4
    Если вы правы, идем, чтобы быть честным, особенно после того, как я просто сказал, что это как массив chars. редактируя его сейчас. @einpoklum – demogorgon.net 13 July 2018 в 15:07

Ваша интуиция в основном верна: вы используете оператор квадратных скобок [] для доступа к элементу в индексированной позиции в коллекции или последовательности. Таким образом,

  • disectedString[0] означает «первый элемент disectedString»;
  • temp[0] означает «первый элемент temp»;

То, что вы перепутали, - это типы, как объяснили комментаторы и ответ @ demogorgon.net.

Теперь, с современным C ++, вы можете «играть немой» и не объявлять то, что знаете типы будут:

std::string disectedString[5];
disectedString[0] = "011001";
auto temp = disectedString[0];
auto print = temp[0];

Обратите внимание на использование auto вместо определенного имени типа. Это будет работать так, как вам бы хотелось. Затем вы можете использовать use print и делать, например:

std::cout << print;

, и это выведет 0.


Кстати, я считаю, должен пересмотреть ваш выбор имен:

  • Интуитивно, print следует ссылаться на функцию или метод, который печатает вещи; Я бы предложил first_character или char_to_print или просто c, если вы хотите быть краткими.
  • temp больше не является временной переменной, чем, скажем, print.
  • Лучше избегать имен переменных, которые содержат имя типа, хотя иногда мы иногда прибегаем к этому. В частности, вы используете слово «string» в именах переменных; вероятно, не очень хорошая идея.
  • Ваша переменная disectedString не является строкой, это массив строк, что запутывает.
2
ответ дан einpoklum 17 August 2018 в 12:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: