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

String и пробелы

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

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

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

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

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

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

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

Решение

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

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 4
Доброго времени суток!
Уточните, что не работает? Правильный способ ввода строк с пробелами вам MisterR показал.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
28.08.2017, 23:48 5
Database покажи.
0
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 27
29.08.2017, 00:23  [ТС] 6
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 7
Цитата Сообщение от 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 8
У вас при вводе числовых значений не очищается буфер клавиатуры. После нажатия "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 9
Цитата Сообщение от Старый воин Посмотреть сообщение
после числового ввода cin.ignore()
Можно и одной строкой:
C++
1
double a2; (cin >> a2).ignore();
1
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 27
29.08.2017, 08:44  [ТС] 10
Спасибо большое
0
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 27
30.08.2017, 18:46  [ТС] 11
111
0
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 27
30.08.2017, 18:54  [ТС] 12
Что я делаю не так?
При вызове getline(), cout << "Название работы" не выводится, а выводится сразу следующий
Миниатюры
String и пробелы   String и пробелы   String и пробелы  

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

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 15
Лучший ответ Сообщение было отмечено Nitrotech как решение

Решение

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

Добавлено через 4 минуты
На скрине у тебя один код, выкладываешь другой. И о каком коде говорить тогда?
0
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 27
30.08.2017, 19:36  [ТС] 18
Изначально была проблема что данные типа 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 19
Цитата Сообщение от Nitrotech Посмотреть сообщение
Ничего не изменилось
Сказки не рассказывай, а покажи код который пробуешь.
Цитата Сообщение от nd2 Посмотреть сообщение
На скрине у тебя один код, выкладываешь другой. И о каком коде говорить тогда?
0
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 27
30.08.2017, 19:51  [ТС] 20
...
Миниатюры
String и пробелы   String и пробелы   String и пробелы  

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru