Как считать строку с пробелами c
Перейти к содержимому

Как считать строку с пробелами c

Ввод в языке C++ через cin

Для считывания данных со стандартного ввода используется объект cin , также определенных в заголовочном файле iostream . Его использование похоже на использование объекта cout для вывода. Например, для считывания двух переменных a и b нужно дать команду:

Также как и в случае с cout , нет нужды беспокоиться о типах данных — можно считывать целые и действительные числа, символы и строки.

Особенности считывания символов

Пусть дано время в формате HH:MM. Считать его можно следующим образом:

int h, m;
char c;
cin >> h >> c >> m;

То есть сначала считывается число, затем — символ, затем — число.

При этом при считывании символа пропускаются пробельные символы (пробелы и концы строк) и считывается следующий непробельный символ. Например, если при запуске приведенного выше кода ввести «12 34», то переменная h станет равна 12, переменная с — ‘3’, а переменная m — 4.

Если установить манипулятор noskipws :

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

Особенности считывания строк

Считывание строк при помощи cin >> s , где s — объект класса string или C-строка приведет к считыванию строки из непробельных символов, при этом пробельные символы пропускаются.Использовать манипулятор noskipws при чтении строк не следует.

Строку целиком до конца строки, вместе с пробельными символами можно считать следующим образом:

Отметим следующую особенность такого считывания. Пусть входные данные заданы так — сначала число строк n, затем — n строк, возможно, содержащие пробелы. Требуется считать данные строки и сохранить их в массиве строк.

Правильное решение будет таким:

int n;
string s, A[100];
cin >> n;
getline(cin, s);
for (int i = 0; i < n; ++i)
getline(cin, A[i]);

Здесь нужно обратить внимание на «лишний» вызов getline после считывания числа n. Дело в том, что cin >> n не считывает конец строки из потока, поэтому последующий вызов getline вернет пустую строку (но зато считает конец строки), поэтому нужно сделать один «холостой» вызов getline перед считыванием всех остальных строк.

Значение, возвращаемое при считывании

Для проверки успешности считывания можно преобразовать значение, возвращаемое операцией считывания к типу bool . Например, следующим образом:

bool is_correct;
int a;
is_correct = (cin >> a);

Если значение переменной is_correct будет true , то считывание было успешно, иначе — нет.

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

int h, m;
char c;
if (cin >> noskipws >> h >> c >> m)
if (c == ‘:’) .
>

Похожее использование — чтение текста «по словам», с обработкой каждого слова:

string word;
while (cin >> word)
// Обработать слово в переменной word
>

Или считывание текста по строкам:

string line;
while (getline(cin, s))
// Обработать строку в переменной line
>

Как считать строку с пробелами c

Сообщение от forsaken66

#include "stdafx.h" #include "iostream" #include "conio.h" #include "stdio.h" #include "string" using namespace std; char *s=""; int main () < cout 

выдает ошибку при вводе строки. не пойму. нет, ясное дело можно использовать string. Но а если char *s то как организовать ввод?

читайте ошибки компилятор которые выдает

error C2661: gets: нет перегруженной функции, принимающей 2 аргументов

вот исправил чуток

#include "iostream" #include "conio.h" #include "stdio.h" #include "string" using namespace std; int main ()

Последний раз редактировалось kedbl4; 19.11.2009 в 12:15 . Причина: неправильно ввел

Ввод строки с пробелами

Ввод строки с пробелами
Нужна помощь!Как сделать так,чтобы после нажатия на пробел программа не заканчивала ввод в строку,а.

Ввод строки с пробелами
Собственно вот текст, не хочет никакими функциями принимать строку stud.fio с пробелами, испробовал.

Ввод строки с пробелами
нижеприведенный код получает строку до первого пробела, а нужно получать с учетом всех символов.

Ввод строки с пробелами
Всё, сдаюсь. Ребят, подскажите, пожалуйста, как строку с пробелами считать int main ()
1171 / 858 / 251
Регистрация: 30.06.2015
Сообщений: 4,485
Записей в блоге: 50
Вместо scanf использовать специальную функцию, например gets_s
Регистрация: 23.07.2014
Сообщений: 34

CoderHuligan, Для одной книги работает с gets(), но если вводить их циклически, то имя второй книги не дает ввести.

Эксперт PythonЭксперт JavaЭксперт CЭксперт С++

12238 / 7405 / 1736
Регистрация: 25.07.2009
Сообщений: 13,586

ЦитатаСообщение от Elektronikerv Посмотреть сообщение

но если вводить их циклически, то имя второй книги не дает ввести.
после ввода числа \n в потоке остаётся
Регистрация: 23.07.2014
Сообщений: 34
easybudda, вы про строку 17? Даже если ее убрать-ничего не миняется. Или я не так понял?

Эксперт PythonЭксперт JavaЭксперт CЭксперт С++

12238 / 7405 / 1736
Регистрация: 25.07.2009
Сообщений: 13,586

ЦитатаСообщение от Elektronikerv Посмотреть сообщение

вы про строку 17?
Нет, я про поток stdin (из которого Вы пользовательский ввод читаете)
Регистрация: 23.07.2014
Сообщений: 34

Ну а как тогда сделать?

Добавлено через 59 минут
А как, например, пробелы заменят на символ подчеркивания "_"?
Пробывал так, нечего не заменяет

1 2 3 4 5 6 7
void ChangeSpace(char *string){ while(*string !='\0'){ if(*string ==' ') *string = '_'; string++; } }

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Ввод строки с пробелами
Мне необходимо ввести несколько слов в строку, использую getline, но в консоле когда в меню.

Ввод строки с пробелами
Я искал насчет этого в поиске и прочитал про get gets getline fgets, так и не понял. Кто то может.

Ввод строки с пробелами
Знающие, помогите решить такую проблему. Надо составить маленькую программку, представление.

Ввод строки char с пробелами
Всем доброго дня. Подскажите плз, У меня есть указатель char *str как ввести в него строку с.

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

Ввод строки с пробелами в поле char
Это часть файла header.h; В программе в поле Name нужно ввести ФИО с пробелами, но программа выдает.

Или воспользуйтесь поиском по форуму:

Как считать строку с пробелами c

Careless_man → Hi,Can you help to find book that teaches how use c++ in CP.

Некропост

asrinivasan007 → The relationship between IQ and CF Rating

intrusiv → Problem of the Year 2023

nor → [C++] Avoiding temporaries — generalizing i++ using std::exchange

R adewoosh → I've completed Project Euler

stdfloat → Unexpected Full Score on oj.uz

Theo830 → Codeforces Round #912 (Div. 2)

xX_I_Have_Esbat_Xx → Reaching my birthyear!

zwezdinv → Codeforces Round #909 (Div. 3)

lanhf → CodeTON Round 7 (Div. 1 + Div. 2, Rated, Prizes!) Editorial

18o3 → Indian ICPC 2023-24 Regionals — Qualifier Rounds

n0sk1ll → Editorial for Codeforces Round #910 (Div. 2)

Некропост

MikeMirzayanov → Часто задаваемые вопросы

Duelist1234 → Codeforces visualizer

Некропост

MikeMirzayanov → Изменение правил об использовании стороннего кода в соревнованиях Codeforces

Alpha_Ashwin007 → Invitation to participate in CodeChef Starters 110 (Rated till 5-stars) - 29th November

_MUSAFIR_ → CP Books Collection( U Can Ignore it )

teemu_ryyti → Ошибочное обвинение в плагиаризме

Некропост

Mister_Minus5 → Junior Balkan Olympiad in Informatics

NemanjaSo2005 → Codeforces Round 911 (Div. 2) Editorial

yefim123 → Не могу решить задачу

Datapas → I'm blue.

kostia244 → [Important] Update Your ACL

hocky → Tier List

mahmoud13 → TLE on Test 6, I don't know why is this happening

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

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