• Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.

[C++] Строки и массивы. Символ окончания строки

Alex1983

Разработчик
Сообщения
914
Симпатии
443
#1
Всем привет. Начал изучать С++.
Вопрос такой. Как понять символ завершающий строку равен нулю(=0)?
В массивах.
Заранее благодарен.
 

iskander-k

Ассоциация VN/VIP
VIP
Сообщения
3,732
Симпатии
2,428
#2
Как понять символ завершающий строку равен нулю(=0)?
'\0'-символ завершающий строковой массив. Благодаря нему можно определить где кончается массив
Код:
char c[]={"Массив сиволов\n Какой-то текст."};
for(i=0;c[i]!='\0';i++);//определяет сколько символов в массиве.
если не ошибаюсь
 

Arbitr

Ассоциация VN
VIP
Сообщения
3,606
Симпатии
1,656
#3
он их только переберет по одному до конца, а записать и вывести результат?)

Добавлено через 1 минуту 57 секунд
точнее Саня скажет но кажется там ошибочка
хоть на С++ ничего не делаю но изучал PHP а это упрощенный С цикл по другому задается
хотя здесь возможно и ошибаюсь
 

iskander-k

Ассоциация VN/VIP
VIP
Сообщения
3,732
Симпатии
2,428
#4
но кажется там ошибочка
это отрицание - не равно
перевожу строку
Код:
(i=0;c[i]!='\0';i++);
если значение не равно 0 !='\0' то счет идет дальше i++(счетчик работает дальше то есть прибавляет 1)
 
Последнее редактирование:

Arbitr

Ассоциация VN
VIP
Сообщения
3,606
Симпатии
1,656
#5
ну да, только имел ввиду зачем оно там? просто не нужно..задаешь начало
и далее цикл
хотя в С как мне говорили больше условностей..может и нужно..
 

Arbitr

Ассоциация VN
VIP
Сообщения
3,606
Симпатии
1,656
#7
тогда выйдет за пределы цикла.
как?)) перебор идет в массиве..закончится массив закончится цикл ведь смотри, у тебя же не до нуля считается...так что... а вот если массив от -10 до +10..на нуле и выйдет из цикла?
 

AlexTNT

Активный пользователь
Сообщения
79
Симпатии
30
#8
Любая символьная константа, например "ОЙ У ПОЛИ КРИНИЧКА", представляет собой массив символов. Во внутреннем представлении компилятор завершает такой массив символом "\0", так что любая программа может по нему легко обнаружить конец строки. Поэтому строка занимает в памяти на один символ больше, чем записано между двойными кавычками. Нумерация элементов массива начинается с нуля. Надо помнить, что, например 'T' - это символ(буква), а ' T ' - это строка, состоящая из двух символов: 'T' и '\0'. Отсюда следует, что пустых строк не бывает.
 

Drongo

Ассоциация VN/VIP
Разработчик
Сообщения
7,844
Симпатии
5,589
#9
Код:
char c[] = { "Массив" };
for(i = 0; c[i] != '\0'; i++); //определяет сколько символов в массиве.
Вот такую конструкцию компилятор распознает как шесть символов + один завершающий символ '\0' итого массив будет из семи символов. Если же задавать размер массива явно
Код:
 const int size = 10;  // размер символьного массива ввода
 char array[size]; // Массив с размером в 10 символов
То нужно учитывать что сюда вместится 9 символов + завершающий символ.

Это не ошибка, а условие не равно. Конструкция цикла, которую привёл iskander-k будет выводить символы по одному пока не встретится символ означающий конец строки.
пока: проверяемый символ не равен завершаемому символу - производить вывод элементов массива "c"
Код:
  for(i = 0; c[i] != '\0'; i++);
     cout<<c[i];
ну да, только имел ввиду зачем оно там? просто не нужно..задаешь начало
Это один и вариантов вывода, полезно когда нужно проверить какой-либо отдельный символ, такая конструкция обеспечивает доступ ко всем символам строки. Вывести можно и прямо

Код:
#include <iostream>
using namespace std;

int main()
{
  int z;
  char c[] = "MyString"; // Выводимая строка

  cout << "Out String = " << c << endl; // вывод как имеет ввиду Arbitr

  for(int i = 0; c[i] != '\0'; i++)
     cout << c[i]; // вывод iskander-k
  cin >> z;
  return 0;
}
//---------------------------------------------------------------------------
перебор идет в массиве..закончится массив закончится цикл ведь смотри, у тебя же не до нуля считается...так что... а вот если массив от -10 до +10..на нуле и выйдет из цикла?
А вот так.
Код:
char c[] = "MyString"; // Выводимая строка
Это всё равно что
Код:
char c[] = { 'M', 'y', 'S', 't', 'r', 'i', 'n', 'g', '\0' };
Последний нуль. Элементы массив начинается с нуля

Код:
c[0] не равно '\0' - цикл продолжается
c[1] не равно '\0' - цикл продолжается
c[2] не равно '\0' - цикл продолжается
c[3] не равно '\0' - цикл продолжается
c[4] не равно '\0' - цикл продолжается
c[5] не равно '\0' - цикл продолжается
c[6] не равно '\0' - цикл продолжается
c[7] не равно '\0' - цикл продолжается
c[8] не равно '\0' - цикл продолжается
c[9] равно '\0' - цикл прерывается

Как понять символ завершающий строку равен нулю(=0)?
Воспринимай его как некую метку, необходимую компилятору\программисту для определения конца строки.
 

Arbitr

Ассоциация VN
VIP
Сообщения
3,606
Симпатии
1,656
#10
будет выводить символы по одному пока не встретится символ означающий конец строки.
уже понял, не знал что завершается строка 0 просто

Добавлено через 1 минуту 11 секунд
Воспринимай его как некую метку, необходимую компилятору\программисту для определения конца строки.
у нас счетчик по другому шел..не до нуля..
 
Сверху Снизу