0 / 0 / 0
Регистрация: 15.08.2016
Сообщений: 2
|
||||||
1 | ||||||
Выход из цикла методом size() класса string15.08.2016, 12:27. Показов 1665. Ответов 17
Метки нет (Все метки)
Подскажите пожалуйста, как происходит выход из цикла в следующем коде? После того как все 'g' заменятся на '7', переменная x должна получить значение -1. И тогда условие продолжения цикла (-1<stroka.size()), что как мне казалось True, но на практике оказывается False.
0
|
15.08.2016, 12:27 | |
Ответы с готовыми решениями:
17
Функция size() стандартного класса string std::string S.size() Приведение типов string.size() к (void*) Корректно ли? string nonVowel = new char[str.size()]; |
22 / 19 / 9
Регистрация: 22.09.2015
Сообщений: 161
|
|
15.08.2016, 13:11 | 2 |
Flekmar, Как по мне, выход происходит по следующей причине. метод size возвращает size_t. А он определен как без знаковый тип (Положительный ). так как происходит сравнение без знакового и знакового, производится арифметическое преобразование типов, согласно которому операнд "меньшего" типа приводится к типу операнда "большего" типа. В иерархии типов "большим" считается тот тип, который может представить большее положительное значение.производится арифметическое преобразование типов, согласно которому операнд "меньшего" типа приводится к типу операнда "большего" типа. В иерархии типов "большим" считается тот тип, который может представить большее положительное значение.
1
|
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
|
||||||
15.08.2016, 13:11 | 3 | |||||
Я бы код заменила на что-то типа:
0
|
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
15.08.2016, 13:19 | 5 |
Лучше: for(size_t x = stroka.find('g'); x != stroka.npos; x = stroka.find('g', x))
0
|
22 / 19 / 9
Регистрация: 22.09.2015
Сообщений: 161
|
|
15.08.2016, 13:21 | 6 |
Хорошо. Я не спорю просто вот, VS 2015 говорит что это size_t
На MSDN
0
|
Любитель чаепитий
|
|
15.08.2016, 13:24 | 7 |
1
|
22 / 19 / 9
Регистрация: 22.09.2015
Сообщений: 161
|
|
15.08.2016, 13:26 | 8 |
GbaLog-, Спасибо так же за ресурс. Теперь буду знать
0
|
22 / 19 / 9
Регистрация: 22.09.2015
Сообщений: 161
|
|
15.08.2016, 16:30 | 10 |
как раз string::npos является -1.
0
|
0 / 0 / 0
Регистрация: 15.08.2016
Сообщений: 2
|
|
15.08.2016, 17:11 [ТС] | 11 |
Так действительно проще и понятнее, но это был пример из учебника, который меня удивил.
0
|
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
|
|
15.08.2016, 18:18 | 12 |
0
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
15.08.2016, 18:48 | 13 |
Ну тогда не стоит о нём упоминать? Много кода олд-скулов использующих -1 как индекс не найденного элемента, и вряд ли как вы говорите найдется имплиминтация std string где пошли против де факто -1 значения
0
|
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
|
||||||
15.08.2016, 19:31 | 14 | |||||
avgoor, лучше вообще через алгоритм
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
15.08.2016, 19:34 | 15 | |||||
Врут! В стандарте черным по белому написано:
1
|
22 / 19 / 9
Регистрация: 22.09.2015
Сообщений: 161
|
|
15.08.2016, 19:40 | 16 |
Наверное тут имелось ввиду следующее
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
15.08.2016, 19:42 | 17 |
del
1
|
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
|
|
15.08.2016, 19:45 | 18 |
0
|
15.08.2016, 19:45 | |
15.08.2016, 19:45 | |
Помогаю со студенческими работами здесь
18
String.size() длина русского слова в 2 раза больше, чем английского Выход из цикла с if Выход из цикла Выход из цикла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |