Проверка того, является ли мой массив строки указателя целым числом

#arrays #c #pointers

Вопрос:

EDIT -> Моя проблема с поиском, было ли целое число, решена. Моя следующая проблема заключается в том, как получить размер массива. Пример:

символ **str = [привет][мир] -> возвращает 2

символ **str = [привет] -> возврат 1

символ **str = [привет][мир][да] -> возвращает 3

Так, как я делаю это прямо сейчас. Это неправильно

 int size = sizeof(str) / sizeof(str[0]);
I also tried
int size = sizeof(str) / sizeof(char *);
 

…..


У меня есть программа, которая получает строку от пользователя типа «Привет, мир». Затем я разбираю это на массив указателей: так что это что-то вроде char **str = [Hello][World] .

Затем я хочу проверить, является ли второй индекс целым числом или нет. Поэтому , если пользователь вводит Hello 2 , эта функция возвращает true (1), но если нет, возвращает false(0).

Я немного не понимаю, как работать с указателями.

Поэтому я думаю, что у меня будет что-то вроде этого:

 int my_function(char** str) {
    // it's empty
    if (str[0] == NULL)
        return 0;

    // Just have one index
    int size = sizeof(str) / sizeof(str[0]);
    if (size < 1) {
        return 0;
    }

    // checking if data in second index is an integer
    int length = strlen(str[1]);
  
    for (int i = 0; i < length; i  ) {
        // Here is my problem how do I go over each character for 
        // only str[1] to check if is an integer???????
        if (!isdigit(str)) {
            return 0;
        }
    }

    return 1;
}
 

Комментарии:

1. Итак, в основном вы хотите проверить, является ли первое, что следует за пробелом, a char или an int ?

2. p20xx, Примечание: «0», «-123″, » 123″, «-123», «123456789012345678901234567890», «0xFACE» — это все примеры целых чисел. «- 123», «123xyz», «», «zxc» — нет.

3. То, как вы рассчитываете size , неверно.

4. @alex01011 спасибо, что увидели это. Как мне тогда рассчитать размер?

5. @p20xx Вы не рассчитываете размер. Передайте размер my_function() из вызывающего кода. Опубликуйте код с надписью «У меня есть программа, которая получает строку», чтобы мы могли получить представление о том, как используется код my_function() .

Ответ №1:

Вам нужно двойное разыменование. Первое разыменование, чтобы получить соответствующий указатель на символ. Второе разыменование, чтобы получить соответствующий символ.

Попробуй:

 isdigit(str) -->  isdigit(str[1][i])
 

Комментарии:

1. Привет, спасибо, что пытались помочь, но это не сработало. Я получаю ошибку: неявное объявление библиотечной функции «isdigit» с типом » int (int)»

2. @p20xx Добавить #include <ctype.h>

3. Идеальный. Спасибо

Ответ №2:

Попробуйте следовать,

     char *secondString = str[1];
    int length = strlen(secondString );
    
    for (int i = 0; i < length ;   i)
    {
    if (!isdigit(secondString[i]))
    return 0;
    }

return 1;