получить последнее целочисленное значение из массива char - PullRequest
0 голосов
/ 27 февраля 2011

Рассмотрим массив символов следующим образом:

43 234 32 32

Я хочу, чтобы последнее значение было 32 в целочисленной форме.

Размер / длина строки неизвестна. В приведенном выше примере есть 4 числа, но размер будет варьироваться.

Как это можно сделать?

Ответы [ 5 ]

3 голосов
/ 27 февраля 2011

Я скопировал эти значения из файла в массив char. Теперь я хочу, чтобы последний номер в целочисленной переменной

Когда вы копировали, добавьте счетчикколичество символов скопировано.Тогда сделай это

int count = 0;
char c;
while(c = readCharFromFile()) {
  array[count++] = c;
}

int last = array[count - 1];
2 голосов
/ 27 февраля 2011

Есть много способов решить эту проблему.

  1. Конвертировать каждый токен (строку, разделенную пробелом) в число, и, когда токены закончатся, вернуть последнее преобразованное значение.

  2. Сканирование строки на наличие токенов до конца, а затем преобразование последнего токена в число.

  3. Начало в конце строки. Пропускайте пробелы и сохраняйте цифры, пока не встретите первый пробел, а затем преобразуйте результат в число.

  4. Разделить строку на массив строк и преобразовать последнюю в число.

Я мог бы продолжать и продолжать, но вы поняли идею, я надеюсь.

1 голос
/ 27 февраля 2011
int getLastInt(char *data)
{
    size_t i = strlen(data);
    if(!i--) return -1; // failure
    for(;i;--i)
    {
        if(data[i] == ' ')
        {
            return atoi(&data[i+1]);
        }
    }
    return -1; // failure
}

Должно работать, пока данные имеют пробел + фактический текст. Вы также можете пропустить strlen и просто перейти вперед, что может быть быстрее в зависимости от strlen вашей системы.

0 голосов
/ 27 февраля 2011

Полагаю, вы хотите использовать комбинацию strtok_r и atoi

0 голосов
/ 27 февраля 2011

Если в строке нет завершающих пробелов:

int last_int(const char *s)
{
    const char *ptr = strrchr(s, ' ');
    if (ptr == NULL) {
        ptr = s;
    } else {
        ptr++;
    }

    return atoi(ptr);
}

Если могут быть конечные пробелы, вам нужно будет сделать что-то наподобие того, что предложил ProdigySim, но с большим количеством состояний, чтобы пройти назад за конечные пробелы (если есть), затем через число, затем вызвать atoi () , Независимо от того, что вы делаете, вам нужно следить за граничными условиями и граничными случаями и решать, как вы хотите их обрабатывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...