У меня проблемы с написанием функции C, которая считывает строку из STDIN и возвращает длину указанной строки... Предложения?
функция для чтения строки и получения длины - C
comment
нет, на самом деле... звучит полезно.
- person tekknolagi   schedule 14.05.2011
Ответы (2)
Итак, просто используйте strlen из стандартной библиотеки C:
#include <string.h>
Итак, функция strlen() доступна. Вам просто нужно передать указатель char, и он вернет длину строки:
size_t length = strlen( myStr );
Обратите внимание, что size_t — целочисленный тип.
Кстати, если вы не знаете об этой функции, вам действительно следует покопаться в библиотеке C и узнать об основных функциях, которые она предоставляет.
person
Macmade
schedule
14.05.2011
где эта функция БЫЛА всю мою жизнь?!?!?!
- person tekknolagi; 14.05.2011
Ха-ха опередил меня на минуту Macmade :P
- person JohnKlehm; 14.05.2011
@tekknolagi: Это все время было здесь:
size_t strlen(char* s) {size_t l = 0; for (;*s;++s,++l); return l;}
- person Michael Burr; 14.05.2011
Обратите внимание, что версия Майкла — самая медленная
strlen()
версия. Вы можете легко сделать это примерно в 10 раз быстрее.
- person Philip; 14.05.2011
@Philip: это была просто шутка, но я думаю, что придумать что-то, что будет в 10 раз быстрее (и останется без ошибок), может быть сложнее, чем вы могли подумать на первый взгляд. Особенно для тех, кто до вчерашнего дня даже не слышал о
strlen()
.
- person Michael Burr; 15.05.2011
@Michael: к сожалению, я знаю. См.
strlen()
glibc на странице tsunanet.net/~tsuna/strlen.c.html. Детали. Однажды я провел временной анализ и сравнил его с наивной версией, и оказалось, что она намного быстрее (на постоянный фактор, о котором я уже забыл). С другой стороны, если мне нужна оптимизация в strlen()
, я, наверное, изначально что-то сделал не так... ;-)
- person Philip; 15.05.2011
person
schedule
Обратите внимание, что strlen возвращает тип size_t, который может быть больше, чем unsigned int.
- person Macmade; 14.05.2011
Действительно, но подумал, что не примитивный тип может сбить с толку кого-то нового.
- person JohnKlehm; 14.05.2011
@Macmade: это был бы адский аргумент!
- person Michael Burr; 14.05.2011
@Macmade: обычный
int
гарантированно сможет хранить все возможные размеры массива. Поскольку строки являются массивами (или лучше: всегда могут рассматриваться как таковые), strlen()
не может переполнить int
.
- person Philip; 14.05.2011
@Philip: я не верю, что это правда.
- person Michael Burr; 15.05.2011
@Michael: Вы правы, это не так. Подробности см. в моем последнем вопросе: stackoverflow.com/questions/6004415/
- person Philip; 15.05.2011