Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将字符串“10.214.239”转换为整数_C - Fatal编程技术网

C 将字符串“10.214.239”转换为整数

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

我有一些格式为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)+(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;
}