Здравствуйте, armani, Вы писали:
A>Как вариант — переложить заботу об указателях на стандартую библиотеку — в большинстве случаев это оправдано, к тому же упрощает код и таким образом минимизирует к-во багов
A>std::string buf("hello world!");
A> int spaces = std::count_if(buf.begin(), buf.end(), isspace);
A>
Дабы не копировать почём зря строку,
const char str[] = "hello";
int spaces = std::count_if(str, str+sizeof(str), isspace); // для char sizeof корректен, для любых символов надо _countof
Или, как в исходном условии, вместо sizeof пишем strlen.
Здравствуйте, byleas, Вы писали:
B>Здравствуйте, armani, Вы писали:
B>Дабы не копировать почём зря строку,
B>const char str[] = "hello";
B>int spaces = std::count_if(str, str+sizeof(str), isspace); // для char sizeof корректен, для любых символов надо _countof
B>Или, как в исходном условии, вместо sizeof пишем strlen.
Только использование sizeof в таком варианте действительно полезно. Все остальные кто предлогал, так или иначе пользоваться strlen, просто незнают о чём говорят. Выполнение strlen это пустая трата времени для поиска нулевого символа, вместо того чтобы за ту же пробежку считать и пробелы.
Здравствуйте, makdak, Вы писали:
M>Здравствуйте, Caracrist, Вы писали:
C>>конечно, тут же делаются кучя лишних операций
C>>C>>char * c = buf;
C>>while (*c != '\0')
C>>{
C>> if (*c == ' ')
C>> count_space_symbols++;
C>> c++;
C>>}
C>>
M>ну это понятно, а если строка не оканчивается 0? хотя Alexander G уже ответил.
Либо на ноль, либо дан размер.
И что там "Alexander G уже ответил"?
Вот это что ли:
char *past_end_buf = buf + strlen(buf);
Здравствуйте, Caracrist, Вы писали:
C>Здравствуйте, makdak, Вы писали:
M>>Здравствуйте, Caracrist, Вы писали:
C>>>конечно, тут же делаются кучя лишних операций
C>>>C>>>char * c = buf;
C>>>while (*c != '\0')
C>>>{
C>>> if (*c == ' ')
C>>> count_space_symbols++;
C>>> c++;
C>>>}
C>>>
M>>ну это понятно, а если строка не оканчивается 0? хотя Alexander G уже ответил.
C>Либо на ноль, либо дан размер.
C>И что там "Alexander G уже ответил"?
C>Вот это что ли:
C>C>char *past_end_buf = buf + strlen(buf);
C>
Alexander G ответил на сабж.
сколько ты еще будешь головой об стену биться?