输入一串数字s字符串,假设字符串长度不超过40个字符,数据间用空格隔开,把字符串里数字字符转化为对应的数字,每个数字存在一个单向动态链表中的一个节点里。

问题表述

已知:输入一串数字s字符串,假设字符串长度不超过40个字符,数据间用空格隔开,把字符串里数字字符转化为对应的数字,每个数字存在一个单向动态链表中的一个节点里,函数原型如下:
struct number * create_number_list(char a) //生成动态链表,输出节点的数量
*struct number{int c;struct number next} //节点结构

话不多说直接上代码
主函数

int main()
{
 char s[100];
 char list[40][40];
 printf("enter string:\n");
 gets(s);
 depart(s,list);
 struct number *node=create_number_list(s,list);
 printf("these numbers are:\n");
 while(node->next!=NULL)
 {
  printf("%4d",node->c);			//顺序输出每一个节点的值
  node=node->next;
 }
 printf("\nThere are %d numbers.",count);
 return 0;
}

分割字符串函数如下

void depart(char str[],char list[40][40])	//将分割的数字存入二维字符数组中
{
 int i=0;
 char *substr=strtok(str," ");		//第二个参数是分隔符
 while(substr)
 {
  strcpy(list[i],substr);
  i++;
  count++;		//全局变量,记录数字的个数
  substr=strtok(NULL," ");
 }
}

其中涉及strtok()函数的用法,可以看看这篇博客strtok()用法

数字字符串转换成整形

int StringToInt(char s[])
{
 char *p=s;
 int priceNum=0;
 while(*p)
 {
  priceNum*=10;
  priceNum+=*p-'0';
  p++;
 }
 return priceNum;
}

不懂可以看这篇数字字符串转换成整形

接下来是创建动态链表,把转换后的数存入每一个节点中

struct number* create_number_list(char *a,char str[40][40])
{
 int i=0;
 number *p1,*p2,*head;
 head=p1=(number *)malloc(sizeof(number));
 p1->c=StringToInt(str[i]);
 while(i<count)
 {
  p2=(number *)malloc(sizeof(number));
  p1->next=p2;
  p1=p2;
  i++;
  p1->c=StringToInt(str[i]);	//调用转换函数,对节点中的c赋值
 }
 p2->next=NULL;
 return head;	//返回头指针
}

运行结果
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值