Каков тип данных для строки?

Это, скорее всего, очень глупый вопрос, но какой тип данных у строки в C++? Я хочу сделать переменную x = "Slim Shady".

Могу ли я объявить x как int? Я пытался объявить его как char, но когда я вычисляю переменную, она дает только первую букву. Любая помощь будет оценена по достоинству.


person masonc15    schedule 16.09.2012    source источник
comment
Конечно, это описано в учебниках .. где-то? (И нет, строка скорее не является целым числом.)   -  person    schedule 17.09.2012
comment
std::string это то, что вы используете.   -  person squiguy    schedule 17.09.2012
comment
Как бы вы использовали это в своем коде? стд::строка х? Кроме того, если вы говорите, используя пространство имен std, вы можете просто сказать строку x?   -  person masonc15    schedule 17.09.2012
comment
Это рудиментарные, действительно основные вещи. Просто погуглите строки в c/c++, и вы получите тысячи ресурсов.   -  person StoryTeller - Unslander Monica    schedule 17.09.2012
comment
@skateboard34 да, ты можешь просто сделать это.   -  person squiguy    schedule 17.09.2012
comment
Пожалуйста, не гуглите строки в C/C++, если только вы не ищете строки в C. Не существует языка с названием C/C++, и C совсем не похож на C++. Google std::string вместо этого.   -  person R. Martinho Fernandes    schedule 17.09.2012
comment
Почему минусы? Это может быть вопрос новичка, но я не думаю, что это плохой вопрос.   -  person Puppy    schedule 17.09.2012
comment
@DeadMG: Согласен, и это не так просто, чтобы быть очевидным для новичка.   -  person Ed S.    schedule 17.09.2012


Ответы (4)


Вам нужно включить строку файла заголовка

#include <string>

Тогда вы сможете использовать std::string

std::string x="Slim Shady"

http://en.cppreference.com/w/cpp/string/basic_string

Вы также не можете использовать std::strings, если вы не хотите их использовать, хотя это ваш лучший вариант

Вы можете использовать массивы Char или указатель char (C-строки)

char x[]="Slim Shady";

or

char* x="Slim Shady";

Ключевое слово auto — это функция C++0x. Вы должны держаться подальше от этого, пока не изучите основы C++.

person Mohamed Ahmed Nabil    schedule 16.09.2012

std::string - лучший выбор. Но вы также можете использовать auto, как в auto x = "Slim Shady!";. Это означает, что вам не нужно выяснять тип, чтобы использовать выражение.

person Puppy    schedule 16.09.2012
comment
Это означает, что вам не нужно выяснять тип, чтобы использовать выражение. – до тех пор, пока вам не понадобится делать с ним что-либо осмысленное, и в этом случае вам нужно знать, что это тип char*. (или const char* в зависимости от вашего компилятора). - person Ed S.; 17.09.2012
comment
@EdS.: Это должно быть char const*. char* для строкового литерала имеет неправильный формат. - person Xeo; 17.09.2012
comment
Не заставляйте новичка начинать использовать auto - person Mohamed Ahmed Nabil; 17.09.2012
comment
Вместо этого он должен использовать ужасные объявления массивов C, amirite? - person Puppy; 17.09.2012
comment
@Xeo: ты прав; тип представляет собой массив const char. Однако преобразование из const char[] в char* совершенно точно определено, поэтому оно не является неправильным, как вы говорите. Изменение данных — это просто неопределенное поведение. - person Ed S.; 17.09.2012
comment
@DeadMG: Проблема в том, что использование auto предполагает, что вы знаете, что делаете. Когда вы сталкиваетесь с ошибками компиляции из-за несоответствия типов и все объявляется как auto, вы понятия не имеете (как новичок), что, черт возьми, происходит. Прежде чем возиться с auto, нужно иметь четкое представление о системе типов. - person Ed S.; 17.09.2012
comment
И, чтобы уточнить; этот ответ не сообщает OP, каков тип строкового литерала. Он говорит ему/ей присвоить его строке (что является преобразованием) или использовать auto (что ничего не говорит о фактическом типе). Он/она до сих пор не знает, что такое тип "hello". - person Ed S.; 17.09.2012
comment
В этом случае неведение — это блаженство. - person Puppy; 17.09.2012

«Slim Shady» — константный литерал типа char[11], который можно преобразовать в const char*. Вы также можете использовать его для инициализации любых массивов символов больше 11. См.:

char a[] = "Slim Shady";
char a[11] = "Slim Shady";
const char* a = "Slim Shady";
char a[12] = "Slim Shady";

Посмотрите на этот небольшой код:

#include <typeinfo>
#include <iostream>

template <class T>
void printTypeName(T t)
{
   std::cout << typeid(T).name() << std::endl;
}

int main() {
  printTypeName("Slim Shady");
  printTypeName<decltype("Slim Shady")>("Slim Shady");
}

Вы получаете (на gcc) искаженные имена:

PKc
A11_c 

Насколько я знаю - первая const char* вторая char[11]. Это легко объяснить, так как при передаче массива чего-либо в функцию он преобразуется в константный указатель.

person PiotrNycz    schedule 17.09.2012

Вы просто имеете в виду:

std::string x = "Slim Shady";
person Tristan    schedule 16.09.2012