c语言的split

leven同学提到一个简单的功能"12 22 33 22 11"中的数字放到一个数组中,但不知道数字的个数。使用指针一个一个判断是否是数字还是空白,不太爽。而java中的split可以
很爽的处理之。c语言中sscanf似乎是不错的选择,于是使用下面方法,试验成功。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 20
#define MAX_LEN 10

int main(){
char line[] = "12 22 33 22 11";
//the max length of int we used no more than MAX_LEN
char *s = (char *)malloc(MAX_LEN * sizeof(char));
int a[MAX];
char *p = line;
int cur_len;
int i = 0;

while(p && sscanf(p,"%s",s) == 1){
cur_len = strlen(s);
s[cur_len] = '\0';
a[i] = atoi(s);
p += cur_len;
p++;
i++;
}

int j = 0;
for(j = 0; j < i-1; j++){// the i is '\0' in s
printf("%d\t",a[j]);
}
printf("\n");
}

sscanf用法参见[url]http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在嵌入式C语言中,split函数的作用是将一个字符串按照指定的分隔符进行分割,并将分割后的子字符串存储到一个字符指针数组中。split函数的函数原型如下所示: void split(char *src, const char *separator, char **dest, int *num); 其中,src是待分割的字符串,separator是分隔符,dest是存储子字符串的字符指针数组,num是表示存储子字符串的字符指针数组的大小的指针。 在函数内部,split函数通过遍历待分割的字符串,找到分隔符的位置,然后将分隔符之前的子字符串拷贝到dest数组中的对应位置。同时,通过更新num指针的值,记录分隔出的子字符串的数量。 使用split函数的步骤如下: 1. 定义一个字符指针数组,用于存储分割后的子字符串。 2. 定义一个整型变量,用于记录分割出的子字符串的数量。 3. 调用split函数,传入待分割的字符串、分隔符、字符指针数组和记录子字符串数量的指针。 4. 根据返回的子字符串数量,遍历字符指针数组,获取每个子字符串的值。 需要注意的是,在使用split函数之前,需要先包含cString.h头文件,并确保split函数的实现已经定义或者引入。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [嵌入式C语言 - 字符串分割和字符串截取](https://blog.csdn.net/ReCclay/article/details/104017259)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [嵌入式C语言精华+.pdf](https://download.csdn.net/download/qq_41877840/12662465)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [嵌入式C语言开发 gdb的使用](https://blog.csdn.net/passwordee/article/details/122446521)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值