Чем char отличается от string
Перейти к содержимому

Чем char отличается от string

  • автор:

Переменные string и char в Java

В этом уроке мы рассмотрим на примерах строковые переменные string и char в Java. Разберем разницу между ними и закрепим новые знания в новом созданном проекте.

Помимо хранения числовых значений, переменные могут содержать текст. Вы можете хранить один или множество символов. Для хранения только одного символа используется переменная char . Чтоб хранить более одного символа, нужен тип переменной string . Переменную string в Java используют чаще, чем char.

Для этого начнем новый проект, нажав File > New Project в строке меню в верхней части NetBeans. Когда появится диалоговое окно New Project, убедитесь, что выбраны Java with Ant и Java Application:

Нажмите Next и введите StringVars в качестве имени проекта. Убедитесь, что в поле Create Main Class стоит галочка. Затем там же удалите после после точки StringVars и введите вместо этого StringVariables, как показано на следующем рисунке:

Таким образом, имя проекта — StringVars, а имя класса — StringVariables. Нажмите кнопку Finish, и ваше окно с кодом будет выглядеть так (все комментарии по умолчанию удалены). Обратите внимание, что имя пакета — все строчные буквы (stringvars), но именем проекта было StringVars.

Чтобы установить в Java переменную string, вы вводите слово String, а затем имя для вашей переменной. Обратите внимание, что в Java переменная String пишется с заглавной «S». И естественно точка с запятой завершает строку:

Присвойте значение новой строковой переменной, введя знак равенства. После знака равенства текст, который вы хотите сохранить, должен находится между двумя двойными кавычками:

Если хотите, вы можете записать все это в одной строке:

Установите вторую строковую переменную для хранения фамилии:

Чтобы напечатать оба имени, добавьте следующий println ():

System.out.println (first_name + » » + family_name);

В круглых скобках println мы имеем:

Мы говорим Java о том, что хотим распечатать все, что находится в переменной с именем first_name. Затем у нас есть символ плюс, за которым следует пробел. В двойных кавычках находится пробел. Java распознает это так, что мы хотим распечатать символ пробела. После пробела у нас есть еще один символ плюс, за которым следует переменная family_name.

Ваше окно с кодом должно выглядеть так:

Запустите свою программу, и вы должны увидеть это в окне вывода:

Разница между переменными string и char в Java

Если вы сохраните только один символ, тогда вам нужна переменная char (беззнаковое целое число, представляющее собой символ UTF-16 (может быть буквой или цифрой)). Чтобы сохранить символ, следует использовать одинарные кавычки вместо двойных. Вот наша программа, но на этот раз с переменной char:

Если вы попытаетесь заключить переменную char в двойные кавычки, NetBeans подчеркнет код красной волнистой линией , сообщая об ошибке «несовместимого типа».

В переменную String также можно заключить только один символ. Но тогда потребуются двойные кавычки:

String name = ‘В‘;

Существует еще много вариантов string, и позже вы их встретите. А пока давайте продолжим и научимся получать информацию от пользователя.

Difference between Character and String in C

Answer: A character is just a single character enclosed in single quotes. For example:

And a character string is a sequence of 0 or more characters enclosed in double quotes. Each string is terminated by a NULL byte. Therefore, string containing 0 characters is called an empty string. For example,

Further, size of a character can be evaluated using sizeof operator while of strings, strlen function does so. strlen function returns actual no. of characters in the string excluding NULL byte. Therefore, while declaring a character array to be a string, keep one byte extra for NULL terminator plus size, in bytes, for maximum no. of characters in the string. For example, for a string containing maximum 10 characters, we need to declare character array of size 11 bytes, as:

Notice that ‘msg’ is a 10 characters string while it’s declared and initialized to contain 11 characters. Last character is NULL byte to terminate the string ‘msg’. Let’s now take a simple program and observe its output.

Output of the above program as:

Notice that size of empty string is 0 bytes while of ‘msg’, which was declared to contain 11 characters, gives size as 10 bytes for string of 10 characters.

Sanfoundry Global Education & Learning Series – 1000 C Tutorials.

Почему string — это char*?

Anton3

Я так понял, что std::string не имелся в виду.
То есть суть вопроса такова: почему строки передают как char* , хотя это тип указателя на один char .

Дело в том, что массивы в C нельзя передавать как параметр функции, указатель на массив нельзя сохранить.
В результате массив, например char[8] , принято передавать как указатель на его первый элемент: char* . Более того, при передаче массива в функцию он автоматически разлагается (decays) до указателя на первый элемент.

Остальные элементы получаются при помощи адресной арифметики: *(p+3) или p[3] , что одно и то же. Итак, указатель в коде C может указывать как на одну переменную, так и на целый массив (точнее, его начало).

Для массивов int или любого другого типа обычно вместе с указателем на первый элемент передают размер массива. Но строки C завершаются нулевым символом, поэтому здесь длина известна и так. Вот и получается, что char* используют вместо char[N] .

Edit: На самом деле, в C можно объявить указатель на массив:
int (*arr)[10] = malloc(sizeof(*arr) * 5);
Не помню, чтобы я видел такую конструкцию в реальном коде.

Разница между типами string и char [] в C ++

Я знаю немного C, и теперь я смотрю на С++. Я привык к массивам char для работы со строками C, но пока я смотрю на код С++, я вижу, что есть примеры, использующие как строковый тип, так и char массивы:

Я предполагаю, что это широко заданный и ответивший (очевидный?) вопрос, но было бы неплохо, если бы кто-нибудь мог сказать мне, какая именно разница между этими двумя способами для работы со строками на С++ (производительность, интеграция API, способ каждый лучше. ).

7 ответов

A char массив — это просто массив массивов символов:

  • Если выделено в стеке (например, в вашем примере), оно всегда будет занимать, например. 256 байтов независимо от того, как долго он содержит текст
  • Если выделено в куче (используя malloc() или новый char []), вы ответственны за освобождение памяти после этого, и вы всегда будете иметь накладные расходы на распределение кучи.
  • Если вы скопируете в массив массив из более чем 256 символов, это может привести к сбою, созданию уродливых сообщений об утверждении или вызвать необъяснимое (неправильное) поведение в другом месте вашей программы.
  • Чтобы определить длину текста, массив должен быть отсканирован, символ по символу, для символа \0.

Строка — это класс, который содержит массив char, но автоматически управляет им для вас. Большинство строковых реализаций имеют встроенный массив из 16 символов (поэтому короткие строки не фрагментируют кучу) и используют кучу для более длинных строк.

Вы можете получить доступ к массиву char следующим образом:

Строки С++ могут содержать вложенные символы \0, знать их длину без учета, быстрее, чем массивы с массивом char для коротких текстов и защищают вас от переполнения буфера. Кроме того, они более читабельны и удобны в использовании.

Однако строки С++ не подходят (очень) для использования через границы DLL, потому что для этого потребуется любой пользователь такой DLL-функции, чтобы убедиться, что он использует ту же самую реализацию компилятора и С++, чтобы он не рискнул своим строковым классом по-разному.

Как правило, класс string также выводит свою кучную память в кучу вызова, поэтому он сможет снова освободить память, если вы используете общую (.dll или .so) версию среды выполнения.

Вкратце: используйте строки С++ во всех своих внутренних функциях и методах. Если вы когда-либо писали .dll или .so, используйте строки C в своих общедоступных функциях (dll/so-protected).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *