Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/197: Рейтинг темы: голосов - 197, средняя оценка - 4.70
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
1

string И getline

12.04.2010, 16:51. Просмотров 38755. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
string name;
cout <<"Name -> ";
getline(cin,name);
cout <<"OK, "<<name;
2 раза требует ввод почему?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2010, 16:51
Ответы с готовыми решениями:

Getline и string
Надо как-то считать вводимый текст в строку полностью, до ввода энтера. Как оказалось getline со...

getline в string
как сделать getline в string. ну чтобы считывало в string до нажатия enter с пробелами

string, getline() чтение строк
Здравствуйте, помогите пожалуйста написать часть кода. Задача состоит в том, чтобы прочитать данные...

Getline, string чтение из файла
Здравствуйте, у меня есть метод класса Аккаунт для чтения имени аккаунта и его результата. Но он...

6
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
12.04.2010, 17:30 2
А у меня требует один раз:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
 
int main()
{
    std::string name;
    std::cout << "Name -> ";
    std::getline(std::cin,name);
    std::cout << "OK, " << name << std::endl;
    system("pause");
    return 0;
}
Может где-нибудь в другом месте ошибка?
2
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
12.04.2010, 19:39  [ТС] 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string text,word;
int pos=0,i=0;
cout <<Rus("Ââåäèòå òåêñò\n");
getline(cin,text);
cout <<Rus("Ââåäèòå ñëîâî äëÿ ïîèñêà: ");
getline(cin,word);
while((pos = text.find(word,pos)) != NULL) {
i++;
pos+=word.size();
}
 
 
cout <<i<<endl;
 
}
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
13.04.2010, 04:20 4
Цитата Сообщение от Krist_ALL Посмотреть сообщение
2 раза требует ввод почему?
Опять-таки не вижу, где эта ошибка.

У тебя другая ошибка - индекс, полученный с помощью функции find(), нужно сравнивать не с NULL (что вообще-то означает 0, а подстрока может начинаться с нулевого индекса), а с npos (беззнаковое целое, инициализированное -1, которое означает "не найдено" для результата функции find()):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
 
int main()
{
    setlocale(LC_ALL, "Russian");
    std::string text, word;
    size_t pos=0, i=0;
    std::cout << "Введите текст: ";
    std::getline(std::cin, text);
    std::cout << "Введите слово для поиска: ";
    std::getline(std::cin, word);
    while((pos=text.find(word, pos))!=std::string::npos)
    {
        ++i;
        pos+=word.size();
    }
    std::cout << "Слово встретилось " << i << " раз(а)" << std::endl;
    system("pause");
    return 0;
}
2
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
13.04.2010, 13:41  [ТС] 5
что такое string::npos?
пробую вывести - выводиться длинное число..
и как по короче можно записать string::npos?
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
13.04.2010, 14:40 6
Цитата Сообщение от Krist_ALL Посмотреть сообщение
что такое string::npos?
пробую вывести - выводиться длинное число.
Еще раз смотрим, что я написал выше:
Цитата Сообщение от Nameless One Посмотреть сообщение
беззнаковое целое, инициализированное -1, которое означает "не найдено" для результата функции find()
Так как npos - это константа, которая инициализируется отрицательным числом -1. Т.е npos - беззнаковое (неотрицательное) число, то вместо -1 в нем хранится максимальное число, которое может вместить тип size_t (4294967295). Это можно проверить, выполнив такую строчку, которая выведет true:

C++
1
std::cout << std::boolalpha << (std::string::npos == std::numeric_limits<size_t>::max()) << std::endl;
Теперь о том, как получилось такое число. Тип size_t на моей машине занимает 4 байта, т.е. 32 бит. В знаковых числах старший разряд (бит) - показатель знака. Отрицательные числа кодируются таким образом (пример для однобайтового типа, т.е. для 8 бит):
  1. Берется модуль отрицательного числа и расписывается его двоичное представление, с числом разрядов, равным числу бит типа, в котором хранится это число. Возьмем то же число -1. Его модуль для 8 разрядов в двоичной системе счисления равен 00000001
  2. Теперь инвертируем биты числа, т.е. в каждом разряде меняем 1 на 0 и наоборот: 11111110
  3. Прибавляем единицу: 11111111
  4. Получаем число, которое интерпретируется как -1, если рассматривать старший разряд (или бит) как знак числа, или 255, если рассматривать число как беззнаковое.
Для типа size_t (4 байта, 32 бит) двоичное представление числа -1 - это последовательность из 32 единиц. Если же рассматривать эту последовательность как беззнаковое число, то получаем 4294967295 - максимальное число, которое может хранится в типе size_t
Цитата Сообщение от Krist_ALL Посмотреть сообщение
и как по короче можно записать string::npos
Можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
 
#define NPOS std::string::npos
 
int main()
{
    setlocale(LC_ALL, "Russian");
    std::string text, word;
    size_t pos=0, i=0;
    std::cout << "Введите текст: ";
    std::getline(std::cin, text);
    std::cout << "Введите слово для поиска: ";
    std::getline(std::cin, word);
    while((pos=text.find(word, pos))!=NPOS)
    {
        ++i;
        pos+=word.size();
    }
    std::cout << "Слово встретилось " << i << " раз(а)" << std::endl;
    system("pause");
    return 0;
}
Фууух...
2
10 / 10 / 2
Регистрация: 01.02.2010
Сообщений: 317
15.04.2010, 13:54  [ТС] 7
Я вместо npos написал -1))

нафиг было придумывать npos...
-1 и все!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2010, 13:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Проблема с getline() и string в массиве структур
Хотел реализовать запись в массив слов с пробелами. Работало до этого с char но это было весьма...

Не работает. cin.getline(string,200);
Я создаю проект. Все работает кроме одного cin.getline(string,200), почему? Когда запускаю этот...

getline, string, запись в файл, русский язык
#include &lt;iostream&gt; using std::ios; using std::cin; using std::cout; using std::endl; ...

Фейл. Вывод string (getline) с пробелами. ООП
В простом варианте всё путём, но в готовом решении не пойми что. Понять, почему строка...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.