Написать функцию на Си, которая бы определяла длину вводимой строки - C (СИ)

  1. Всем привет. Хотелось бы получить помощь, человеческую с объяснением. Суть вопроса - написать функцию на Си, которая бы определяла длину вводимой строки. Поискал, почитал, но так и не понял, может кто-нибудь помочь и написать такую функцию с объяснениями? Спасибо заранее.


textual

Код к задаче: «Написать функцию на Си, которая бы определяла длину вводимой строки - C (СИ)»

unsigned str_length (const char * const str)
{
    short x = 1;
    char * ptr = (char*) &x;
    unsigned res = 0;
 
    if (ptr[0] == 1)
        res = strchr((char*)str, 0) - (char*)str;
    else
        res = (char*)str - strchr((char*)str, 0);
 
    return res;
}

СДЕЛАЙТЕ РЕПОСТ

15   голосов, оценка 3.733 из 5



Похожие ответы
  1. Строка, содержащая произвольный текст, состоит не более чем из 255 символов. Написать, какие буквы и сколько раз встречаются в этом тексте. Ответ должен приводиться в грамматически правильной форме, например а — 25 раз, v — 3 раза и т. д

  1. Всем привет. Недавно начал изучать язык программирования Си и появились трудности с написанием данных программ по задачам: 1.Напишите функцию, которая принимает два входных аргумента и передает вызывающему окружению два результата, первый из которых является произведением аргументов, а второй — их суммой. Поскольку из функции можно непосредственно вернуть только одно значение, придется вернуть второе значение при помощи дополнительного параметра, являющегося указателем или ссылкой.

  1. Доброе время суток! Хочу считать слово из файла "Data.txt" в массив строк arr. В файле только слово "test". Пытаюсь реализовать это с помощью функции (использую CodeBlocks). Программа компилируется и вылетает с сообщением "прекращена работа программы". Думаю, что неправильно передаю массив в функцию или неправильно его в функции вызываю. Подскажите, пожалуйста, что не так? Заранее спасибо.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include #include   void func(char (*arr)[5]) {     FILE *in = fopen("Data.txt","r");       fscanf(in, "%s", arr[0]);     printf(arr[0]);       fclose(in); }   int main() {     char (*arr)[5];       func(arr);       return 0; }

  1. Написать функцию md(x, y) для получения остатка от деления целочисленных операндов.

  1. Составить функцию нахождения объема параллелепипеда по значениям длин трех ребер, выходящих из одной вершины. С помощью данной функции вычислить объем для N параллелепипедов.

  1. Дан текст, содержит от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв; между соседними словами - не менее одного пробела. Написать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по следующему правилу: 1) перенести первую букву в конец слова; 2) перенести последнюю букву в начало слова.

  1. Правильно ли я передаю arg в функцию listInsert? Нет возможности проверить. Ниже структура и фунция встаки аргумента.C1 2 3 4 5 double complex arg; scanf("%d", &re); scanf("%d", &im); arg=re+im*I; listInsert(&list, pos - 1, arg);ФункцииC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 void listInsert(List *list, const int index, const LIST_TYPE value) {     int prev, nextHole;       if (list->_size == list->_capacity)     {         printf("Ошибка. Список полон\n");           return;     }       if (list->_size)     {         if (index < 0 || index > list->_size)         {             printf("Ошибка. Позиция не найдена\n");               return;         }     }     else if (index != 0)     {         printf("Ошибка. Позиция не найдена\n");           return;     }       nextHole = list->_arr[list->_hole]._next;       if (index == 0)     {         list->_arr[list->_hole]._next = list->_first;         list->_first = list->_hole;     }     else     {         prev = findPrev(list, index);         list->_arr[list->_hole]._next = list->_arr[prev]._next;         list->_arr[prev]._next = list->_hole;     }       list->_arr[list->_hole]._data = value;     list->_hole = nextHole;     list->_size++;       printf("Элемент %g%+gi вставлен в список\n", creal(arg), cimag(arg));            int findPrev(List *list, const int index) {     int i, prev = list->_first;       if (index == 0)         return END;       for (i = 0; i < index - 1; i++)         prev = list->_arr[prev]._next;       return prev; } } СтруктураC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 typedef double complex LIST_TYPE; typedef struct _Item {     LIST_TYPE _data;     int _next;     int _prev; } Item;   typedef struct _List {     Item *_arr;     int _first;     int _hole;     int _capacity;     int _size; } List;

  1. как вызвать функцию?C1 2 3 4 5 6 7 8 9 10 11 int sum_last(list_ptr a) {     list_ptr ptr;       assert(NULL != a);     assert(NULL != a->next);       for (ptr = a; ptr->next->next; ptr = ptr->next)     {     }     return ptr->data + ptr->next->data; } Это полный кодC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 #include #include #include #include #include   typedef int bool; #define true 1 #define false 0   typedef struct list {     int data;     struct list *next; } *list_ptr; char ch1, str[100]; int  i, count = 0; list_ptr x = NULL;   int sum_last(list_ptr a) {     list_ptr ptr;       assert(NULL != a);     assert(NULL != a->next);       for (ptr = a; ptr->next->next; ptr = ptr->next)     {     }     return ptr->data + ptr->next->data; }   void show(struct list *a) {     while (a != NULL) {         printf(" %d\t", a->data);         a = a->next;     } }   bool isnumber(const char*s) {     char* e = NULL;     (void)strtol(s, &e, 0);     return e != NULL && *e == (char)0; }   void add(list_ptr *a, int newdata) {     if (*a == NULL) {         *a = (list_ptr)malloc(sizeof(list_ptr));         (*a)->data = newdata;         (*a)->next = NULL;         return;     }         list_ptr ptr;         for (ptr = *a; ptr->next; ptr = ptr->next)     {             }     ptr->next = (struct list *)malloc(sizeof(struct list));     ptr = ptr->next;     ptr->data = newdata;     ptr->next = NULL; }   int main() {     char c = 0, c1;     int i, j, min, number;       while (c != 27)     {         system("cls");         printf(" Enter - run the program.\n");         printf(" Esc - exit.\n");         printf(" Any other key - information about program.\n");         c = getch();         system("cls");         switch (c)         {         case 27:             break;         case 13:         {             system("cls");             printf("It\'s time to fill the list (to end the filling eneter ***)\n\n");             for (;;) {                 printf("Enter the element:\n>>");                 do                 {                     gets(str);                     if (!isnumber(str) && strcmp(str, "***") != 0) {                         printf("Please, enter an integer number:\n>> ");                         continue;                     }                     break;                 } while (true);                 if (strcmp(str, "***") == 0) break;                 number = atoi(str);                 add(&x, number);                 count++;             }             if (count == 0) printf("\nThe first list is empty.\n");             else printf("Elements in your first list are:\n");             show(x);             x = NULL;             printf("\n\n\nPress \'Enter\' to continue");             getch();             printf("The sum of the last and the penultimate number: ");             printf("\n\tEsc - exit.\n");             printf("\tAny other - go to the main page.\n");             c = getch();             break;         }           default:         {             printf("\n Finds the sum of the last and penultimate elements of the list L containing at least two elements.\n\n");             printf(" Esc - exit.\n");             printf(" Any other - go to the main page.\n");             c = getch();             break;         }         }     }     return 0; }

  1. Найти строку, содержащую наибольшее количество слов, и вывести ее на экран монитора. Количество строк 5, а максимальное число символов в строке - 80. Массив строк ввести с помощью инициализации Примечания: Данные вводятся с клавиатуры. В программе при обращении к элементу массива нельзя использовать дополнительную переменную для вычисления его адреса. Задачу нужно решить применяя указатель второго ранга. Буду очень признателен за помощь.

  1. создать функцию, которая считает сумму элементов стека