簡體   English   中英

如何從C中的字符串中提取各種整數?

[英]How to extract various integers from a string in C?

我想知道如何從字符串中提取各種數字。 我知道strtol可以工作,但是它似乎只對第一位有效。

這是我的代碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(){
    long v1, v2, v3;
    char str[20] = "16,23";
    char *d;
   v1 = strtol(str, &d, 10);
   v2 = strtol(str, &d, 10);
   printf("string is %s\nv1 is:%i\nv2 is:%d\n",str , v1,v2);
   return 0;
}

在此示例中,我想輸出v1 = 16和v2 = 23。

另一個示例,如果str為“ 12,23,34”,我希望v3 = 34

提前致謝 :)

您可以有很多方法。 其中之一是利用由上一個strtol()調用填充的endptr作為下一個strtol()的源。

否則,為了獲得更好,更靈活的方法,您還可以選擇將strtok()與預定義的定界符(此處為)一起使用,以逐個獲取令牌並將其轉換為intlong (根據需要),直到strtok()返回NULL。

使用long strtol(const char * nptr, char ** endptr, int base) endptr允許輕松進行后續解析,因為這是解析停止的地方。

#include <errno.h>
#include <stdlib.h>
#include <stdio.h>

int string_to_longs(const char *s) {
  #define N 3
  long v[N];
  int i;
  for (i=0; i<N; i++) {
    errno = 0;
    char *end;
    v[i] = strtol(s, &end, 10);

    if (errno) return -1; // overflow
    if (s == end) return -1; // no conversion
    printf("v[%d] = %ld\n", i, v[i]);
    if (*end == 0) break; // we are done
    if (*end != ',') return -1; // missing comma
    s = (const char *) (end + 1);
  }
  return i;
}

int main(void) {
  string_to_longs("16,23");
  string_to_longs("12,23,34");
  return 0;
}

strtol只是將字符數組轉換為long int。 當找到第一個對解釋整數沒有意義的字符時,它將停止。

string.h中有一個名為strtok的函數,可幫助您標記字符串。

注意strtok改變原始字符數組的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM