C 将字符串“10.214.239”转换为整数
我有一些格式为10.214.239的字符串要转换为整数。有些字符串只有数千个,因此只包含1个点,但有些字符串是数百万个,因此包含2个点。有没有一个简单的方法可以解决这个问题?您大概需要:C 将字符串“10.214.239”转换为整数,c,C,我有一些格式为10.214.239的字符串要转换为整数。有些字符串只有数千个,因此只包含1个点,但有些字符串是数百万个,因此包含2个点。有没有一个简单的方法可以解决这个问题?您大概需要: 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)+(n
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);
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);
}
免责声明:这是一种非错误检查、快速编写的代码,不应该像现在这样使用,但它应该让您知道需要做什么。简单解决方案:
int i,ans=0;
for(i=0;num[i];i++)
if(num[i]!='.') ans=ans*10+num[i]-'0';
printf("%d",ans);
只需遍历每个字符,并使用from确定字符是否为数字。类似这样的方法会奏效:
#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实现:
删除所有点并转换为整数?删除所有点,然后使用该函数。我可能需要一些解释来说明如何做到这一点:最好将其设置为长的。快速编写代码以了解您需要做什么。这不是一个非常优雅的解决方案,IMHO。此解决方案确实具有处理可能的负输入值的优点。其他解决方案则不然。老实说,从长远来看,这种方法要好得多。strtol允许非常彻底的错误检查。
#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;
}
#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;
}