c 字符串转数组

c 字符串转数组

概述

一种实现思路

1.识别字符串中的分隔符

2.根据分隔符将字符串中各整数提取出来

3.在提取过程中将整数逐个存入数组

实现

代码如下:

点击查看代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define _IN_OUT_
#define _IN_
#define _OUT_


static int StrToArr(_IN_OUT_ int* arr, _IN_ char* str)
{
    if (str == NULL || arr == NULL)
		return 0;
	char Separator = '0';
	int strindex = 0;
	int arrindex = 0;
	int len = strlen(str);
	for (int i = 0; str[i] != '\0'; i++)
	{
		if (str[i] > '9' || str[i] < '0' && str[i] != '-')
		{
			Separator = str[i];//提取分隔符
			break;
		}
	}
	while (1)
	{
		while (str[strindex] != Separator)
		{
			int num = (int)str[strindex] - 48;//提取整数
			arr[arrindex] *= 10;
			arr[arrindex] += num;
			strindex++;
			if (strindex == len)
			{
				return arrindex + 1;//返回数组长度
			}
		}
		strindex++;
		arrindex++;
	}
}

int main()
{
	char* str = "78 95 888 1 99999";
	int len = strlen(str);
	/*
	* 为数组申请字符串长度的内存
	* 防止数组长度不够导致的溢出
	*/
	int* arr = malloc(sizeof(int) * len);
	memset(arr, 0, sizeof(int) * len);//将数组中元素全部初始化为0
	int arrlen = StrToArr(arr, str);
	printf("长度:%d\n", arrlen);
	for (int i = 0; i < arrlen; i++)
	{
		printf("%d ", arr[i]);
	}
    printf("\n");
	free(arr);
	return 0;
}
结果如下:

长度:5
78 95 888 1 9999

stdio.h中ssanf()函数可实现相似功能:

点击查看代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int arr[10] = { 0 };
	char* str = "78 95 888 1 99999";
	sscanf(str, "%d %d %d %d %d", &arr[0], &arr[1], &arr[2], &arr[3], &arr[4]);
	for (int i = 0; i < 5; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
	return 0;
}
结果如下:

78 95 888 1 9999

posted @ 2022-05-09 23:34  涅莫涅  阅读(687)  评论(0)    收藏  举报