#c #strlen
#c #strlen
Вопрос:
У меня возникли проблемы с написанием функции C, которая считывает строку из STDIN и возвращает длину указанной строки… Предложения?
Комментарии:
1. нет, на самом деле … звучит полезно.
Ответ №1:
Итак, просто используйте strlen из стандартной библиотеки C:
#include <string.h>
Итак, функция strlen() доступна. Вам просто нужно передать указатель на символ, и он вернет длину строки:
size_t length = strlen( myStr );
Обратите внимание, что size_t является целочисленным типом.
Кстати, если вы не знаете об этой функции, вам действительно следует покопаться в библиотеке C и узнать об основных функциях, которые она предоставляет.
Комментарии:
1. где эта функция БЫЛА всю мою жизнь?!?!?!
2. Ха-ха, опередил меня на минимальный Macmade 😛
3. @tekknolagi: Это было прямо здесь с самого начала:
size_t strlen(char* s) {size_t l = 0; for (;*s; s, l); return l;}
4.Обратите внимание, что версия Майкла является самой медленной
strlen()
из существующих. Вы можете легко сделать это примерно в 10 раз быстрее.5. @Philip: это была просто шутка, но я думаю, что придумать что-то, что в 10 раз быстрее (и при этом не содержит ошибок), может оказаться сложнее, чем вы могли бы предположить на первый взгляд. Особенно для тех, кто даже не слышал о
strlen()
до вчерашнего дня.
Ответ №2:
#include <stdio.h>
#include <stdlib.h> // not totally necessary just for EXIT_SUCCESS
#include <string.h>
int main(int argc, char* argv[]) {
// check number of params
if (argc != 2) {
// argv[0] is name of exe
printf("usage: %s string", argv[0]);
// check length of first command line parameter
} else {
// strlen does the counting work for you
unsigned int length = strlen(argv[1]);
printf("Length is %dn", length);
}
return EXIT_SUCCESS;
}
Комментарии:
1. Обратите внимание, что strlen возвращает тип size_t, который может быть больше, чем unsigned int.
2. Действительно, но подумал, что непримитивный тип может сбить с толку кого-то нового.
3. @Macmade: это был бы чертовски хороший аргумент!
4. @Macmade: Обычный
int
массив гарантированно сможет хранить массив любого возможного размера. Поскольку «строки» являются массивами (или лучше: всегда могут обрабатываться как таковые),strlen()
не может быть переполненияint
.5. @Philip: Я не верю, что это правда.