问题表述
已知:输入一串数字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; //返回头指针
}
运行结果