for (a = str; * a; a++) ...
Это работает, начиная указатель a
в начале строки, пока разыменование a
неявно преобразуется в false, увеличивая a
на каждом шаге.
По сути, вы будете проходить по массиву до тех пор, пока не доберетесь до терминатора NUL, который находится в конце вашей строки (\0
), потому что терминатор NUL неявно преобразуется в false - другие символы этого не делают.
Используя метод, описанный выше, как я могу проанализировать его и получить последнее целое число строки (2000), зная, что последнее целое число (2000) может отличаться.
Вам нужно будет искать последний пробел перед \0
, затем вам нужно вызвать функцию для преобразования оставшихся символов в целое число. См strtol
.
Рассмотрим этот подход:
- найти конец строки (используя этот цикл)
- поиск назад пробела.
- используйте это для вызова
strtol
.
-
for (a = str; *a; a++); // Find the end.
while (*a != ' ') a--; // Move back to the space.
a++; // Move one past the space.
int result = strtol(a, NULL, 10);
Или, в качестве альтернативы, просто отслеживайте начало последнего токена:
const char* start = str;
for (a = str; *a; a++) { // Until you hit the end of the string.
if (*a == ' ') start = a; // New token, reassign start.
}
int result = strtol(start, NULL, 10);
Преимущество этой версии заключается в том, что в строке не требуется пробел.