char c[размер_буфера];
cin >> c;
Как раз до пробела
P.S: Жалоба на ответ выше уже направлена =) Во-первых не отвечает на вопрос, во вторых явный оверквотинг.
P.P.S: По поводу выхода за пределы буфера - в комментах =)
Другие языки программирования и технологии
как считывать строку типа char до пробела C++
const size_t size = 0xFF;
char str[size];
cin >> str;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
char str[size];
cin >> str;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
Со строками мы с вами работали практически в каждой нашей программе и до этого урока. Точнее со строковыми константами – последовательностью символов в двойных кавычках. Нам часто приходилось выводить на экран ту или иную информацию. Например:
строки в С++
Текст в кавычках и есть строковая константа. Кавычки используются для определения начала и конца строковой константы и её частью не являются.
Достаточно часто необходимо не только печатать какие-то короткие сообщения по ходу программы, а и работать с определённым текстом, хранить его где-то, обращаться к нему и редактировать, по необходимости. К строковой константе, рассмотренной выше, мы не сможем обратиться в программе, например для того, чтобы перезаписать её (мы не знаем ни ее имени ни адреса в памяти). Сейчас вы узнаете об одном из способов работы со строками в C++. Позже мы познакомимся ещё с одним способом – использованием класса string.
Итак о первом: в C++ для хранения строк используют символьные массивы. Это такие же массивы, как мы с вами уже рассматривали в статье о массивах в С++, но хранят они не числовые данные, а символьные. Можно представить символы такого массива расположенными последовательно в соседних ячейках памяти – в каждой ячейке хранится один символ и занимает один байт. Один байт потому, что каждый элемент символьного массива имеет тип char. Последним символом каждой такой строки является символ \0 (нулевой символ). Например:
строки в С++, символьные массивы в С++
Сам текст, включая пробел, состоит из 11-ти символов. Если бы в последней ячейке находилась например . (точка), а не нулевой символ \0 – для компилятора это уже не строка. И работать с таким набором символов надо было бы, как с обычным массивом – записывать данные в каждую ячейку отдельно и выводить на экран посимвольно (при помощи цикла):
строки в C++
C++
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
char str[12] = {'Ж','и','л','-','б','ы','л',' ','п','ё','с','.'};
for (int i = 0; i < 12; i++)
{
cout << str[i];
}
cout << endl;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
char str[12] = {'Ж','и','л','-','б','ы','л',' ','п','ё','с','.'};
for (int i = 0; i < 12; i++)
{
cout << str[i];
}
cout << endl;
return 0;
}
строки в С++, символьные массивы в С++
К счастью в C++ есть куда более удобный способ инициализации и обращения к символьным массивам – строкам. Для этого последним символом такого массива обязательно должен быть нулевой символ \0. Именно он делает набор символов строкой, работать с которой, гораздо легче, чем с массивом символов.
Объявляется строка таким образом – создаем массив типа char, размер в квадратных скобках указывать не обязательно (его подсчитает компилятор), оператор = и в двойных кавычках пишем необходимый текст. То есть инициализируем массив строковой константой:
строки в C++
C++
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
char str[] = "Жил-был пёс"; // '\0' присутствует неявно
cout << str << endl;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
char str[] = "Жил-был пёс"; // '\0' присутствует неявно
cout << str << endl;
return 0;
}
Прописывать нулевой символ не надо. Он присутствует неявно и добавляется в каждую такую строковую константу автоматически. Таким образом, при том что мы видим 11 символов в строке, размер массива будет 12, так как \0 тоже символ и занимает один байт памяти. Займет он последнюю ячейку этого символьного массива. Как видите, для вывода строки на экран, достаточно обратиться к ней по имени: cout << str << endl; cout будет выводить на экран символ за симв
строки в С++
Текст в кавычках и есть строковая константа. Кавычки используются для определения начала и конца строковой константы и её частью не являются.
Достаточно часто необходимо не только печатать какие-то короткие сообщения по ходу программы, а и работать с определённым текстом, хранить его где-то, обращаться к нему и редактировать, по необходимости. К строковой константе, рассмотренной выше, мы не сможем обратиться в программе, например для того, чтобы перезаписать её (мы не знаем ни ее имени ни адреса в памяти). Сейчас вы узнаете об одном из способов работы со строками в C++. Позже мы познакомимся ещё с одним способом – использованием класса string.
Итак о первом: в C++ для хранения строк используют символьные массивы. Это такие же массивы, как мы с вами уже рассматривали в статье о массивах в С++, но хранят они не числовые данные, а символьные. Можно представить символы такого массива расположенными последовательно в соседних ячейках памяти – в каждой ячейке хранится один символ и занимает один байт. Один байт потому, что каждый элемент символьного массива имеет тип char. Последним символом каждой такой строки является символ \0 (нулевой символ). Например:
строки в С++, символьные массивы в С++
Сам текст, включая пробел, состоит из 11-ти символов. Если бы в последней ячейке находилась например . (точка), а не нулевой символ \0 – для компилятора это уже не строка. И работать с таким набором символов надо было бы, как с обычным массивом – записывать данные в каждую ячейку отдельно и выводить на экран посимвольно (при помощи цикла):
строки в C++
C++
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
char str[12] = {'Ж','и','л','-','б','ы','л',' ','п','ё','с','.'};
for (int i = 0; i < 12; i++)
{
cout << str[i];
}
cout << endl;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
char str[12] = {'Ж','и','л','-','б','ы','л',' ','п','ё','с','.'};
for (int i = 0; i < 12; i++)
{
cout << str[i];
}
cout << endl;
return 0;
}
строки в С++, символьные массивы в С++
К счастью в C++ есть куда более удобный способ инициализации и обращения к символьным массивам – строкам. Для этого последним символом такого массива обязательно должен быть нулевой символ \0. Именно он делает набор символов строкой, работать с которой, гораздо легче, чем с массивом символов.
Объявляется строка таким образом – создаем массив типа char, размер в квадратных скобках указывать не обязательно (его подсчитает компилятор), оператор = и в двойных кавычках пишем необходимый текст. То есть инициализируем массив строковой константой:
строки в C++
C++
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
char str[] = "Жил-был пёс"; // '\0' присутствует неявно
cout << str << endl;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
char str[] = "Жил-был пёс"; // '\0' присутствует неявно
cout << str << endl;
return 0;
}
Прописывать нулевой символ не надо. Он присутствует неявно и добавляется в каждую такую строковую константу автоматически. Таким образом, при том что мы видим 11 символов в строке, размер массива будет 12, так как \0 тоже символ и занимает один байт памяти. Займет он последнюю ячейку этого символьного массива. Как видите, для вывода строки на экран, достаточно обратиться к ней по имени: cout << str << endl; cout будет выводить на экран символ за симв
Похожие вопросы
- C++ как переменную (signed int) разделить на старший и младший байт, а после записать в 2е другие переменные типа char?
- C++, надо вывести строку только с 1 пробелом вместо нескольких
- Как считывать строки в Arduino?
- Подскажите аналог erase для работы с типом char на С++
- Сравнение переменных типа char в с++
- Зачем char в паскале? Зачем используется символьный тип, Char, в паскале?
- Pascal. Дана строка, элементы - числа через пробел. Как отсечь числа, которые содержат '0'?
- как сравнить элементы массива типа char?
- Как удалить нулевые строки из матрицы в turbo c++?
- Народ, напишите "горячие клавиши" компа типа ctrl+V, ctrl+C с описанием
cin >> c;
или
cin >> setw(размер_буфера) >> с;
иначе можно выйти за пределы массива.