С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.79/103: Рейтинг темы: голосов - 103, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 27

String и пробелы

28.08.2017, 22:28. Показов 22206. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно ввести строку с пробелами с клавиатуры и записать в текстовый файл, как это сделать?
При вводе строки с пробелами выполнение программы прерывается
Если вводить без пробела, все работает.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.08.2017, 22:28
Ответы с готовыми решениями:

Проверка string строки на пробелы
Существует ли в контейнере string метод поиска какого-либо символа в строке.К примеру пробела?

Замена символов на пробелы в string
Здравствуйте, есть такое задание:Есть вектор page в котором находятся string в нем записан большой текст в котором есть русские...

Убрать в переменной типа string пробелы
Задача у меня такая. Пользователь вводит текст с консоли. 1.Удалить все пробелы и знаки препинания. 2. Очередную букву в цикле...

22
 Аватар для MisterR
69 / 68 / 52
Регистрация: 28.10.2015
Сообщений: 388
28.08.2017, 22:30
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

C++
1
2
string str;
    getline(cin, str);
2
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 27
28.08.2017, 22:52  [ТС]
Не работает, возможно тут проблема в самом коде, сильно не кидайтесь, я начинающий

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <string>
#include <fstream>
#include <Windows.h>
#include "Database.h"
 
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    ofstream fout;
    fout.open("Baza.txt");
    ifstream fin;
    fin.open("Baza.txt");
 
    Database database;
 
    cout << "Выберите действие: \n1 - Ввести данные\n2 - Посмотреть данные\n3 - Удалить данные\n4 - Выйти" << endl;
    
    int n; cin >> n; // Выбор действия
    system("cls");
    
    if (n == 1)
    {
        cout << "Название работы: " << endl;
        string a3; cin >> a3; system("cls");
        
        cout << "Цена работы: " << endl;
        double a2; cin >> a2; system("cls");
        
        cout << "Название детали: " << endl;
        string a; cin >> a; system("cls");
        
        cout << "Цена детали: " << endl;
        double a1; cin >> a1; system("cls");
        
        cout << "Дата установки: " << endl;
        string a4; cin >> a4; system("cls");
        
        cout << "Срок гарантии: " << endl;
        string a5; cin >> a5; system("cls");
        
        database.setwork_name(a3);
        database.setwork_price(a2);
        database.setdetail(a);
        database.setdetail_price(a1);
        database.setdate(a4);
        database.setgarant(a5);
 
        fout << database.getwork_name() << endl;
        fout << database.getwork_price() << endl;
        fout << database.getdetail() << endl;
        fout << database.getdetail_price() << endl;
        fout << database.getdate() << endl;
        fout << database.getgarant() << endl;
     }
 
    else if (n == 2)
    {
        
    }
 
    system("pause");
    return 0;
}
0
 Аватар для Старый воин
93 / 92 / 21
Регистрация: 16.08.2017
Сообщений: 188
Записей в блоге: 1
28.08.2017, 23:45
Доброго времени суток!
Уточните, что не работает? Правильный способ ввода строк с пробелами вам MisterR показал.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
28.08.2017, 23:48
Database покажи.
0
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 27
29.08.2017, 00:23  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#pragma once
#include <string>
 
using namespace std;
 
class Database
{
private:
    string detail; 
    double detail_price; 
    double work_price; 
    string work_name; 
    string date; 
    string garant; 
public:
    Database(void);
    void     setdetail(string);
    string   getdetail();
    void     setdetail_price(double);
    double   getdetail_price();
    void     setwork_price(double);
    double   getwork_price();
    void     setwork_name(string);
    string   getwork_name();
    void     setdate(string);
    string   getdate();
    void     setgarant(string);
    string   getgarant();
 
    ~Database(void);
 
 
 
 
 
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#pragma once
 
#include "Database.h"
 
using namespace std;
 
Database::Database() {}
Database::~Database() {}
 
void Database::setdetail(string d)
{
    detail = d;
}
 
string Database::getdetail()
{
    return detail;
}
 
void Database::setdetail_price(double dp)
{
    detail_price = dp;
}
 
double Database::getdetail_price()
{
    return detail_price;
}
 
void Database::setwork_price(double w)
{
    work_price = w;
}
 
double Database::getwork_price()
{
    return work_price;
}
 
void Database::setwork_name(string wn)
{
    work_name = wn;
}
 
string Database::getwork_name()
{
    return work_name;
}
 
void Database::setdate(string d)
{
    date = d;
}
 
string Database::getdate()
{
    return date;
}
 
void Database::setgarant(string g)
{
    garant = g;
}
 
string Database::getgarant()
{
    return garant;
}
Добавлено через 4 минуты
Не выводится строка с пробелами
и так
C++
1
2
string str;
    getline(cin, str);
и так
C++
1
2
string str;
cin >> str;
Добавлено через 1 минуту
-9.25596e+61

-9.25596e+61

Собственно что в файле вижу
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
29.08.2017, 00:30
Цитата Сообщение от Nitrotech Посмотреть сообщение
cin >> n;
C++
1
(cin >> n).get();
Там, где ввод не в string, сделай аналогично (например, double a2; (cin >> a2).get();). Где ввод в string - через getline() (2-й пост).
0
 Аватар для Старый воин
93 / 92 / 21
Регистрация: 16.08.2017
Сообщений: 188
Записей в блоге: 1
29.08.2017, 00:57
У вас при вводе числовых значений не очищается буфер клавиатуры. После нажатия "Enter" символ конца строки остается и следующий оператор (getline()), который строку получает, трактует это как ввод пустой строки.
Ввод числовых данных, так как показал nd2 устраняет эту проблему. Можно еще использовать после числового ввода cin.ignore()
C++
1
2
double a2; cin >> a2;
        cin.ignore();
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
29.08.2017, 01:00
Цитата Сообщение от Старый воин Посмотреть сообщение
после числового ввода cin.ignore()
Можно и одной строкой:
C++
1
double a2; (cin >> a2).ignore();
1
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 27
29.08.2017, 08:44  [ТС]
Спасибо большое
0
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 27
30.08.2017, 18:46  [ТС]
111
0
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 27
30.08.2017, 18:54  [ТС]
Что я делаю не так?
При вызове getline(), cout << "Название работы" не выводится, а выводится сразу следующий
Миниатюры
String и пробелы   String и пробелы   String и пробелы  

0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
30.08.2017, 19:02
Цитата Сообщение от Nitrotech Посмотреть сообщение
Что я делаю не так?
Посты не читаешь (и л/с).
0
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 27
30.08.2017, 19:11  [ТС]
А если по существу?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cout << "Название работы: " << endl;
        string a3; getline(cin, a3); system("cls");
        
        cout << "Цена работы: " << endl;
        double a2; (cin >> a2).ignore(); system("cls");
        
        cout << "Название детали: " << endl;
        string a; getline(cin, a); system("cls");
        
        cout << "Цена детали: " << endl;
        double a1; (cin >> a1).ignore(); system("cls");
        
        cout << "Дата установки: " << endl;
        string a4; getline(cin, a4); system("cls");
        
        cout << "Срок гарантии: " << endl;
        string a5; getline(cin, a5); system("cls");
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
30.08.2017, 19:15
Лучший ответ Сообщение было отмечено Nitrotech как решение

Решение

Цитата Сообщение от Nitrotech Посмотреть сообщение
А если по существу?
Куда уж существенней?
Цитата Сообщение от nd2 Посмотреть сообщение
C++
1
(cin >> n).get();
0
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 27
30.08.2017, 19:19  [ТС]
Так я тоже пробовал, при вводе пробела программа закрывается.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
30.08.2017, 19:28
Цитата Сообщение от Nitrotech Посмотреть сообщение
Так я тоже пробовал,
Что пробовал? Где пробовал? Так должно быть, если хочешь чтобы этого не было:
Цитата Сообщение от Nitrotech Посмотреть сообщение
При вызове getline(), cout << "Название работы" не выводится, а выводится сразу следующий
При чём здесь, вообще, пробел?

Добавлено через 4 минуты
На скрине у тебя один код, выкладываешь другой. И о каком коде говорить тогда?
0
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 27
30.08.2017, 19:36  [ТС]
Изначально была проблема что данные типа string в которых присутствует пробел не записываются в файл и программа прерывает свою работу после этого.

При замене
C++
1
cin >> a;
на
C++
1
(cin >> n).get();
Ничего не изменилось

При вводе
C++
1
getline(cin, a);
Появилась вторая проблема что это кусок кода программа вообще пропускает
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
30.08.2017, 19:38
Цитата Сообщение от Nitrotech Посмотреть сообщение
Ничего не изменилось
Сказки не рассказывай, а покажи код который пробуешь.
Цитата Сообщение от nd2 Посмотреть сообщение
На скрине у тебя один код, выкладываешь другой. И о каком коде говорить тогда?
0
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 27
30.08.2017, 19:51  [ТС]
...
Миниатюры
String и пробелы   String и пробелы   String и пробелы  

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.08.2017, 19:51
Помогаю со студенческими работами здесь

Нужно поставить пробелы по краям строки (string), язык c++
Нужно поставить пробелы по краям строки (string), язык c++. Строка вводится пользователем.

Доступ к паре в map<string, vector<pair<string, string>>>Temp
Подскажите пожалуйста как получить данные в векторе пар ? void showData(const map&lt;string, vector&lt;pair&lt;string,...

Удалить в строке все лишние пробелы, то есть серии подряд идущих пробелов заменить на одиночные пробелы
Я уже решал эту задачу с помощью циклов и символьных массивов, и выкладывал на этот форум , но я не знаю как решить её , с помощью типа...

Какое одинаковое значение можно вернуть из функций <string> f () и vector < <string> > f()?
Понятное дело, что всё обсуждение будет вертеться вокруг аналога NULL. char* f_0 () { return NULL; } char** f_1 () { ...

Как перебрать все элементы в map<string, vector<string>>
Доброго времени суток. Решаю следующую задачу: В файле есть сведения об автомобилях: марка автомобиля, номер и фамилия владельца. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru