#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
или anint
?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;