функция для чтения строки и получения длины — C

#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: Я не верю, что это правда.