У меня есть несколько строк формата «10.214.239», которые я хочу преобразовать в целое число. Некоторые из строк являются только тысячами и, следовательно, содержат только одну точку, но некоторые из них миллионы и, следовательно, содержат 2 точки. Есть ли простой способ решить эту проблему?Преобразование строки "10.214.239" в integer
ответ
int i, len;
int result=0;
len = strlen(num);
for(i=0; i<len; i++){
if(num[i] >= '0' && num[i] <= '9')
result=(result*10)+(num[i]-'0')
}
printf("%d", result);
Лучше сделать это долго. –
быстро написанный код, чтобы просто нужно было понять, что вам нужно делать. – Vineet1982
Вы примерно это нужно:
int main()
{
const char num[] = "12.345.66";
char buffer[100];
// copy string to buffer skipping dots
char c;
int j = 0;
for (int i = 0; c = num[i]; i++)
{
if (c != '.')
buffer[j++] = c;
}
// put the NUL strig terminator
buffer[j] = 0;
// convert string stripped of dots to long
long number = strtol(buffer, NULL, 10);
}
Отказ от ответственности: это проверка не ошибка, быстро написанный код, который не должен использоваться, поскольку он стоит здесь, но это только должно дать вам представление о том, что тебе необходимо сделать.
Не очень изящное решение, ИМХО. –
Это решение действительно имеет значение для обработки возможных отрицательных входных значений. Других решений нет. –
Честно говоря, этот подход намного лучше в долгосрочной перспективе. 'strtol()' позволяет очень тщательную проверку ошибок. – RoadRunner
Простое решение:
int i,ans=0;
for(i=0;num[i];i++)
if(num[i]!='.') ans=ans*10+num[i]-'0';
printf("%d",ans);
Просто пройти через каждый символ, и использовать isdigit()
от <ctype.h>
, чтобы определить, есть ли символы номера. Что-то, как это будет работать:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void) {
const char *test = "10.214.239";
const char neg = '-';
long number = 0;
for (size_t i = 0; test[i] != '\0'; i++) {
if (isdigit(test[i])) {
number *= 10;
number += test[i] - '0';
}
}
/* if first character is a dash, make sure the converted number is negative */
if (test[0] == neg) {
number *= -1;
}
printf("number = %ld\n", number);
return 0;
}
Другой подход от всех остальных ответов до сих пор было бы использовать стандартные библиотечные функции, предназначенные для обработки манипулировать/обрабатывать строки. Например, это может быть сделано с sscanf
:
#include <stdio.h>
int main(void) {
const char *test = "10.214.239";
int vals[3] = {0, 0, 0};
const int n = sscanf(test, "%i.%i.%i", &vals[0], &vals[1], &vals[2]);
const int exponent = n < sizeof(vals)/sizeof(int) ? 1: 1E3;
long number = vals[0]*1E3*exponent + vals[1]*exponent + vals[2]);
printf("%ld\n", number);
return 0;
}
Или, в качестве альтернативы, вы можете использовать strtok
разбить строку и atol
преобразовать каждую подстроку в номер:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char *test = "10.214.239";
char *tok = test;
const int exponent = 1e3;
long ans = 0;
while ((tok = strtok(tok, ".")) != NULL) {
ans = ans*exponent + atol(tok);
tok = NULL;
}
printf("%ld\n", ans);
return 0;
}
- 1. Преобразование строки в Integer
- 2. Logstash - Преобразование строки в Integer
- 3. Преобразование алфавитной строки в Integer в C#
- 4. Преобразование строки json в integer в php
- 5. Преобразование месяца строки в Integer в Java
- 6. Преобразование из строки "" в тип Integer недействительно
- 7. Преобразование строки в split, to integer
- 8. Преобразование строки двоичного литерала в Integer [Java]
- 9. Преобразование из строки «» для ввода «Integer» недействительно
- 10. Преобразование Java в Integer?
- 11. Преобразование Плавающие в Integer
- 12. преобразование varchar в integer
- 13. преобразование из строки в тип 'Integer' недопустимо в нижнем коде
- 14. Преобразование строки parse в integer в Xcode для сортировки
- 15. Преобразование из строки «valor» в тип «Integer» недействительно в VB.NET
- 16. Преобразование NSDate к Integer
- 17. Преобразование DateTime String в Integer
- 18. Преобразование из ULong в Integer
- 19. Преобразование NSTimInterval в Integer Swift
- 20. неявное преобразование String в Integer
- 21. Преобразование Bundle в Integer (Intents)
- 22. Преобразование значений RGB в Integer
- 23. Преобразование String (двоичный) в Integer
- 24. Преобразование из Integer, в BigInteger
- 25. Преобразование Char Array в Integer
- 26. Преобразование Float в Integer Equivalent
- 27. Преобразование SortedSet в массив Integer
- 28. Преобразование Integer удвоится в Haskell
- 29. Преобразование String в Java в Integer
- 30. Неверное преобразование из строки "" в тип 'Integer'. - VB.NET
Удалить все точки и бросание к целому числу? – Matheno
Удалите все точки, а затем используйте функцию ['strtol'] (http://www.cplusplus.com/reference/cstdlib/strtol/). –
Возможно, я мог бы немного объяснить, как это сделать :) –