猿问

如何处理形如这种的字符串:

-1 5:1 7:1 14:1 19:1 39:1 40:1 51:1 63:1 67:1 73:1 74:1 76:1 78:1 83:1
将它变为-1 1:0 2:0 3:0 4:0 5:1 ... 7:1 ... 14:1 ... 19:1 ... 39:1 40:1 ... 51:1 ... 63:1 ... 67:1 73:1 74:1 76:1 78:1 83:1
就是把其中缺少的标号处补上x:0的形式
用C语言实现,请问具体用到哪些函数,操作思路如何?详细回答者将继续追加高额悬赏分。谢谢各位帮忙

斯蒂芬大帝
浏览 99回答 2
2回答

侃侃尔雅

#include&nbsp;<stdio.h>#include&nbsp;<string.h>void&nbsp;main(){&nbsp;int&nbsp;a,c,j,m,flag;&nbsp;char&nbsp;b;&nbsp;struct&nbsp;str&nbsp;{&nbsp;&nbsp;int&nbsp;a;&nbsp;&nbsp;char&nbsp;b;&nbsp;&nbsp;int&nbsp;c;&nbsp;}aa[100],bb[200];&nbsp;printf("请输入待处理数据,以输入65535完成输入!\n");&nbsp;scanf("%d",&aa[0].a);&nbsp;bb[0].a&nbsp;=&nbsp;aa[0].a;&nbsp;int&nbsp;i=1;&nbsp;do&nbsp;{&nbsp;&nbsp;scanf("%d%c%d",&a,&b,&c);&nbsp;&nbsp;if(a<0||a>65536||b!=':'||c<0||c>65535)&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;printf("ERROR&nbsp;INPUT!\n");&nbsp;&nbsp;}&nbsp;&nbsp;else&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;aa[i].a&nbsp;=&nbsp;a;&nbsp;&nbsp;&nbsp;aa[i].b&nbsp;=&nbsp;b;&nbsp;&nbsp;&nbsp;aa[i].c&nbsp;=&nbsp;c;&nbsp;&nbsp;&nbsp;++i;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;}&nbsp;while(aa[i-1].a!=&nbsp;65535);&nbsp;m&nbsp;=&nbsp;1;&nbsp;do&nbsp;{&nbsp;&nbsp;flag&nbsp;=&nbsp;0;&nbsp;&nbsp;for(j=1;j<i-1;j++)&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;if(aa[j].a==m)&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;}&nbsp;&nbsp;if(flag==1)&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;bb[m].a&nbsp;=&nbsp;aa[j].a;&nbsp;&nbsp;&nbsp;bb[m].b&nbsp;=&nbsp;aa[j].b;&nbsp;&nbsp;&nbsp;bb[m].c&nbsp;=&nbsp;aa[j].c;&nbsp;&nbsp;}&nbsp;&nbsp;else&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;bb[m].a&nbsp;=&nbsp;m;&nbsp;&nbsp;&nbsp;bb[m].b&nbsp;=&nbsp;':';&nbsp;&nbsp;&nbsp;bb[m].c&nbsp;=&nbsp;0;&nbsp;&nbsp;}&nbsp;&nbsp;m++;&nbsp;&nbsp;&nbsp;}&nbsp;while(bb[m-1].a!=&nbsp;aa[i-2].a);&nbsp;printf("\n%d",bb[0],a);&nbsp;j=1;&nbsp;do&nbsp;{&nbsp;&nbsp;printf("\n%d%c%d",bb[j].a,bb[j].b,bb[j].c);&nbsp;&nbsp;j++;&nbsp;}&nbsp;while(j<m);&nbsp;printf("\n");&nbsp;}

月关宝盒

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>typedef struct node{ //这个数据结构用于存储单个比例表达式int bf;//存储比的前项,也就是冒号之前的数字int af;//存储比的后项,也就是冒号之后的数字struct node *next;//指向下一个比} node;typedef struct{//这个单链表结构用于存储所有的比node *first;//指向第一个比例项node *last;//指向最后一个比例项int cnt;//比例项的个数} list;list *init(void)//初始化单链表{list *st=malloc(sizeof(list));if (st==NULL) exit(-1);else st->cnt=0;return st;}void push_back(list *l,int bf,int af)//在单链表l的末尾插入由bf和af作为比的前后项的比例式{node *tm=malloc(sizeof(node));if (tm==NULL) exit(-1);tm->af=af;tm->bf=bf;tm->next=NULL;if (l->cnt){l->last->next=tm;l->last=tm;}else{l->first=l->last=tm;}l->cnt++;}void add(list *l,int tbf)//把以l表中最后一项的比例前项+1到tbf-1这些整数做为比例前项,0做为比例后项的比例式插入到l表中{int i,fbf;node *tm;for (i=l->last->bf+1;i<tbf;i++)push_back(l,i,0);}size_t num_len(const int a)//辅助函数,返回整数a的字符长度{char str[80];sprintf(str,"%d",a);return strlen(str);}char *toStr(list *l)//将l链表中的内容转化为可输出的字符串{char *str=malloc(sizeof(char)*3);int bn=2;node *t=NULL;if (str==NULL) exit;strcpy(str,"-1");for (t=l->first;t!=NULL;t=t->next){str=realloc(str,sizeof(char)*(bn+num_len(t->af)+num_len(t->bf)+2));if (str==NULL) exit(-1);sprintf(str+bn," %d:%d\0",t->bf,t->af);bn=strlen(str);}return str;}void FREE(list *a)//释放单链表a占用的空间{node *c,*b;for (b=a->first;b!=NULL;b=c){c=b->next;free(b);}free(a);}int main(void){char *chstr,cnstr[]="-1 5:1 7:1 14:1 19:1 39:1 40:1 51:1 63:1 67:1 73:1 74:1 76:1 78:1 83:1";list *slist=init();int inbf,inaf,len=0;while (cnstr[len])//当cnstr字符串中还有字符未读取时继续{while(isspace(cnstr[len])) ++len;//跳过空格字符sscanf(cnstr+len,"%d",&inbf);//从cnstr[len]字符开始读取一个整数(比的前项)len+=num_len(inbf);//将刚才读取的整数的字符长度累加到len上以 确定下次sscanf()读取时的位置//len+=sscanf(cnstr+len,"%d",&inbf);if (inbf==-1)//如果读取到的是第一项(即读取到-1)就把1:0存入slist单链表push_back(slist,1,0);else//如果读取到的不是第一项(即inbf不是-1){add(slist,inbf);//将表slist中的当面末项到inbf之间缺少的项添加到表slist中while(!isdigit(cnstr[len])) ++len;//路过非数字字符,以便于后面读取比的后项sscanf(cnstr+len,"%d",&inaf),inaf;//读取比的后项。len+=num_len(inaf);//将刚才读取的整数inaf的字符长度累加到len上以确定下次sscanf()读取时的位置push_back(slist,inbf,inaf);//将cnstr字符串中的当前比式加入到表slist中}}puts(chstr=toStr(slist));//将处理完成的slist表转换为可输出的字符串,并输出FREE(slist);//释放slist占用的空间free(chstr);//释放转换后的字符串占用的空间。return 0;}
随时随地看视频慕课网APP
我要回答