用指针方法实现:输入两个字符串分别存入字符数组中,再将第二个字符串连接到第一个字符串之后并输出(不能

用指针方法实现:输入两个字符串分别存入字符数组中,再将第二个字符串连接到第一个字符串之后并输出(不能调用strcat()函数)。

1个回答

#include <stdio.h>
void mystrcat(char * s1, char * s2)
{
while (*s1) s1++;
while (*s2)
{
*s1 = *s2;
s1++;s2++;
}
*s1='\0';
}
int main()
{
char s1[100];
char s2[100];
scanf("%s", s1);
scanf("%s", s2);
mystrcat(s1, s2);
printf("%s", s1);
return 0;
}

问题解决请点采纳。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c++怎么将字符串中的汉字和数字分别存入不同字符指针所指空间?
如字符串:测试1次 将 测试 存入char*s 将 1 存入char* p
C++ 用指针数组处理若干个字符串,要求去除其中重复的字符串,每种字符串只保留一个。
个人的思路是:将第一次出现的字符串存入另一个字符串str2中,再出现的话进行判断是否存入str2,循环遍历,最终输出str2 求大神指点!! 如 char*str[100]={"America","America","China","China"} 最终输出 America China
希望在输入时不能用到fgets,我的代码有一点问题
题目描述 已知正整数n,n的范围是1—100。你要从键盘读入n个字符串,每个字符串的长度不确定,但是n个字符串的总长度不超过100000。你要利用字符指针数组将这n个字符串按照ASCII码顺序进行升序排序,然后再打印到屏幕上。字符串中可能包含ASCII码中的任意字符,每个字符串以换行符结束输入。 要求:不允许定义如char str[100][100000];这样的二维数组,因为会极大的浪费内存空间。你应定义char str[100000];这样的存储空间,将n个字符串连续的存储在一维字符空间内,然后将这n个字符串的起始位置保存在字符指针数组中,再进行排序操作。 输入与输出要求:输入一个正整数n,代表待排序字符串的个数,n不超过100,然后是n个字符串,每个字符串的长度不确定,但至少包含1个字符。n个字符串的总长度不会超过100000。输出排序后的n个字符串,每个字符串占一行。 程序运行效果: Sample 1: 4↙ Where there is hope ,there is a way.↙ Welcome Beijing.↙ Nice idea.↙ Have fun.↙ Have fun.↙ Nice idea.↙ Welcome Beijing.↙ Where there is hope ,there is a way.↙ #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char str[100000]; int n, i, j, k, len; scanf("%d", &n); getchar();//将回车键进行储存 char *substr[100];//n个字符数组指针 char *b; k=0;//k初始化 j=0;//j初始化 for(i=0;i<n;i++)//将全部字符串存入数组str[100000]中 ,第i行 { scanf("%c", &str[j]); substr[k]=&str[j];//将每行字符的开头字符存入第k个数组指针中 while(str[j]!='\n')//每一行的字符串是以回车键结束,遇到回车键即跳出循环,换下一行 { j++; scanf("%c", &str[j]); } k++;//进入下一个数组指针 getchar();//将换行键储存 } str[j]='\0'; i=0; for(i=0;i<n-1;i++)//运用冒泡排序将其从小到大重新排序 { for(j=0;j<n-1-i;j++) { if(strcmp(substr[j],substr[j+1])>1) { strcpy(b,substr[j]); strcpy(substr[j],substr[j+1]); strcpy(substr[j+1],b); } } } for(i=0;i<n;i++) { printf("%s", substr[i]); printf("\n"); } return 0; }
java 很奇怪的问题,包括数组和字符串转换成数值的问题
直接上问题: ![图片说明](https://img-ask.csdn.net/upload/201702/04/1486203234_442610.png) - 第一个问题: ```java String[][] temp = null; temp[i][j] = one[j]; ... ``` 这样使用后报空指针问题?又是数组初始化问题?何解? 改成这样后还是不行,如下 ```java String[][] temp = new String[100][]; ``` 然后我改成这样: ```java String[][] temp = new String[100][13]; ... ``` 问题消失,这是为什么? ----- - 第二个问题: 出现 > java.lang.NumberFormatException: For input string: "12" 这个问题是格式转换出错,字符串不是数字? 然后又修改: ![图片说明](https://img-ask.csdn.net/upload/201702/04/1486203736_483591.png) 报错: ![图片说明](https://img-ask.csdn.net/upload/201702/04/1486203693_424016.png) 排除了字符串中混有空格,上边输出的是读取的字符串,然后每行分割后存入one数组,到这步出现问题。。。 网上找了很多,没有结果,始终不知道自己错在哪里,望前辈解答,感激不尽
为什么键盘输入字符串和文件导入字符串都有错?错误应该怎么改?
``` #include <iostream.h> #include <windows.h> #include <string> #include<fstream> using namespace std; class Stack;//类Stack的声明 /* 定义一个链栈结点类Stacknode */ class Stacknode { friend class Stack;//申请友元类 private: Stacknode(Stacknode *nextp=NULL);//构造函数 Stacknode(char &newdata,Stacknode *nextp=NULL);//构造函数 int data;//数据元素 Stacknode *next;//递归定义指向后继结点的指针 }; /* Stacknode的实现部分 */ Stacknode::Stacknode(Stacknode *nextp)//构造函数 { next=nextp; } Stacknode::Stacknode(char &newdata,Stacknode *nextp)//构造函数 { data=newdata; next=nextp; } //结点类Stacknode的定义结束 /* 定义一个链栈类Stack */ class Stack { public: Stack();//创建一个空栈 ~Stack();//回收一个栈 void clear();//销毁一个栈 bool empty() const;//确定栈是否已空 bool push(char &item);//把数据压进栈 bool pop();//出栈 bool pop(char &item);//把数据弹出栈,返回 bool top(char &item) const;//取出栈顶元素 private: Stacknode *newnode(Stacknode *nextp=NULL); Stacknode *newnode(char &item,Stacknode *nextp=NULL);//创建新的结点 Stacknode *Stacktop; int Stacklength; }; /* Stack的实现部分 */ Stacknode *Stack::newnode(Stacknode *nextp)//创建新的结点,不带数据 { return new Stacknode(nextp); } Stacknode *Stack::newnode(char &item,Stacknode *nextp)//创建新的结点,数据域赋值 { return new Stacknode(item,nextp); } //以下为栈类Stack的函数定义 Stack::Stack()//创建一个空栈 { Stacktop=newnode();//创建一个栈顶指针初始化,相当于Stacktop=NULL;本链表没有用头结点 Stacklength=0; } Stack::~Stack()//回收一个栈 { clear(); delete Stacktop;//释放栈底 } void Stack::clear()//销毁一个栈 { while(pop());//不停地出栈,而每次释放空间在出栈函数中完成 } bool Stack::empty() const//确定栈是否已空 { return Stacklength<=0?true:false; } bool Stack::push(char &item)//数据进栈 { Stacknode *newnodep;//定义指针newnodep,准备指向申请的新结点 newnodep=newnode(item,Stacktop);//申请新结点,把数据存入,把指针域指向头指针 if(!newnodep)//如果没有申请到空间,返回失败 return false; Stacktop=newnodep;//改链,完成进栈 Stacklength++;//栈的长度增加 return true;//本次操作成功 } bool Stack::pop()//出栈,不要栈顶数据 { Stacknode *usednodep;//定义指针usednodep,准备指向出栈的结点 if(!empty())//判断是否栈空 { usednodep=Stacktop;//指向出栈的结点 Stacktop=Stacktop->next;//栈顶指针后移 delete usednodep;//释放空间 Stacklength--;//栈的长度减少 return true;//本次操作成功 } return false;//否则本次操作失败 } bool Stack::pop(char &item)//出栈,把栈顶数据弹返回去 { Stacknode *usednodep;//定义指针usednodep,准备指向出栈的结点 if(!empty())//判断是否栈空 { usednodep=Stacktop;//指向出栈的结点 Stacktop=Stacktop->next;//栈顶指针后移 item=usednodep->data;//把数据保留下来,返回去 delete usednodep;//释放空间 Stacklength--;//栈的长度减少 return true;//本次操作成功 } return false;//否则本次操作失败 } bool Stack::top(char &item) const//取出栈顶数据返回去 { if(!empty())//如果栈不空,记录当前栈顶元素 { item=Stacktop->data;//通过item返回去 return true;//本次操作成功 } return false;//否则本次操作失败 } /* 定义一个功能类SymbolMatching */ class SymbolMatching { private: Stack *stack; public: SymbolMatching();//构造函数 ~SymbolMatching();//析构函数 bool manualinputdatabase(char *database);//人工输入数据信息 bool fileguidedatabase(char *filename);//文件导入数据信息 }; SymbolMatching::SymbolMatching()//构造函数 { stack=new Stack; } SymbolMatching::~SymbolMatching()//析构函数 { delete stack; } bool SymbolMatching::manualinputdatabase(char *database)//人工输入数据信息 { int i=0; char match,symbol; bool is_match=true; while(database[i]!='\0'&&is_match) { symbol=database[i++]; if(symbol=='('||symbol=='{'||symbol=='[') stack->push(symbol);//入栈 else if(symbol==')'||symbol=='}'||symbol==']') { if(stack->empty()) { if(database[i+1]!='\0') cout<<"右边符号多于左边符号!"<<endl; else cout<<"符号"<<symbol<<"无法找到与之匹配的符号!"<<endl; is_match=false; } else { stack->top(match); stack->pop();//出栈 is_match=(symbol==')'&&match=='('||symbol==']'&&match=='['||symbol=='}'&&match=='{'); if(!is_match) cout<<"符号"<<match<<"和"<<symbol<<"不匹配!"<<endl; } } } if(is_match) { if(!stack->empty())//栈不为空 { cout<<"左边符号多于右边符号!"<<endl; is_match=false; } else cout<<"左右符号匹配次序正确!"<<endl; } stack->clear(); return is_match; } bool SymbolMatching::fileguidedatabase(char *filename)//文件导入数据信息 { int i=0; char match,symbol; bool is_match=true; while(filename[i]!='\0'&&is_match) { symbol=filename[i++]; if(symbol=='('||symbol=='{'||symbol=='[') stack->push(symbol);//入栈 else if(symbol==')'||symbol=='}'||symbol==']') { if(stack->empty()) { if(filename[i+1]!='\0') cout<<"右边符号多于左边符号!"<<endl; else cout<<"符号"<<symbol<<"无法找到与之匹配的符号!"<<endl; is_match=false; } else { stack->top(match); stack->pop();//出栈 is_match=(symbol==')'&&match=='('||symbol==']'&&match=='['||symbol=='}'&&match=='{'); if(!is_match) cout<<"符号"<<match<<"和"<<symbol<<"不匹配!"<<endl; } } } if(is_match) { if(!stack->empty())//栈不为空 { cout<<"左边符号多于右边符号!"<<endl; is_match=false; } else cout<<"左右符号匹配次序正确!"<<endl; } stack->clear(); return is_match; } /* 定义一个实现链栈功能的菜单处理类interfacebase */ class interfacebase { private: SymbolMatching SymbolMatchingonface; public: void clearscreen(void);//清屏 void showmenu(void);//显示菜单函数 int userchoice(void);//用户的选项 void processmenu(int menuchoice);//菜单函数 }; /* interfacebase类的实现部分 */ void interfacebase::clearscreen(void) { system("cls"); } void interfacebase::showmenu(void) { cout<<"链式堆栈实现括号匹配判断的功能菜单"<<endl; cout<<"=================================="<<endl; cout<<"1.人工输入数据信息"<<endl; cout<<"2.文件导入数据信息"<<endl; cout<<"0.退出"<<endl; cout<<"=================================="<<endl; } int interfacebase::userchoice(void) { int menuchoice; cout<<"请输入您的选择:"; cin>>menuchoice; return menuchoice; } void interfacebase::processmenu(int menuchoice) { switch(menuchoice)//根据用户的选择进行相应的操作 { case 1: { string str; char temp; cout<<"输入字符串,按回车键结束输入:"<<endl; while((temp=cin.get())!='\n') { str +=temp; } const int LEN =str.length(); char* database = new char[LEN];//根据输入字符串的长度,创建字符数组 for(int i = 0;i<LEN;i++) //将字符串保存到字符数组中 { database[i]=str[i]; } SymbolMatchingonface.manualinputdatabase(database); delete database; } break; case 2: { ifstream in("data.txt"); char data,j,*filename=new char[100]; int num=0; while(!in.eof()) { in>>data; filename[num]=data; cout<<filename[num]; num++; } cout<<endl; SymbolMatchingonface.fileguidedatabase(filename); delete filename; } break; case 0: exit(0); default: cout<<"对不起,您输入的功能编号有错!请重新输入!!!"<<endl; break; } } /* 程序主入口 */ void main(void) { int menuchoice;//定义变量,菜单选单项的选择 interfacebase interfacebasenow; system("color f0");//修改屏幕的背景色和字的颜色 interfacebasenow.clearscreen();//清屏 while(1)//永真循环 { interfacebasenow.showmenu();//显示菜单 menuchoice=interfacebasenow.userchoice();//获取用户的选择 interfacebasenow.processmenu(menuchoice);//处理用户的选择 system("pause"); interfacebasenow.clearscreen();//清屏 } }//主函数结束 ```
上位机向单片机发送字符串
上位机向单片机发送一串字符串,存入一个数组缓冲区RX1_Buffer[COM_RX1_Lenth]中,接下来单片机提取数组缓冲区中的一部分字符串,将该字符串转化为整形数据,接着将整形数据转化为十六进制数通过串口发送给上位机,单片机连续向上位机发送数据,上位机第一次能正确的接收到上位机发送给单片机的数据,过后上位机收到的数据就是错误的,不知道是什么原因,附部分程序代码如下: void UART1_int (void) interrupt UART1_VECTOR { if(RI) { RI = 0; if(COM1.B_RX_OK == 0) { if(COM1.RX_Cnt >= COM_RX1_Lenth) COM1.RX_Cnt = 0; RX1_Buffer[COM1.RX_Cnt++] = SBUF; COM1.RX_TimeOut = TimeOutSet1; } } if(TI) { TI = 0; if(COM1.TX_read != COM1.TX_write) { SBUF = TX1_Buffer[COM1.TX_read]; if(++COM1.TX_read >= COM_TX1_Lenth) COM1.TX_read = 0; } else COM1.B_TX_busy = 0; } } void TX1_write2buff(u8 dat) //写入发送缓冲,指针+1 { TX1_Buffer[COM1.TX_write] = dat; //装发送缓冲 if(++COM1.TX_write >= COM_TX1_Lenth) COM1.TX_write = 0; if(COM1.B_TX_busy == 0) //空闲 { COM1.B_TX_busy = 1; //标志忙 TI = 1; //触发发送中断 } } void deal_uart(void) { if(RX1_Buffer[0]== 'R') { for(i=3;i<5;i++) Y_arr[i-3] = RX1_Buffer[i]; t_year = strtod(Y_arr,NULL); TAB_T[5] = DecToHex(t_year); for(i=6;i<8;i++) M_arr[i-6] = RX1_Buffer[i]; t_month = strtod(M_arr,NULL); TAB_T[4] = DecToHex(t_month); for(i=9;i<11;i++) D_arr[i-9] = RX1_Buffer[i]; t_day = strtod(D_arr,NULL); TAB_T[3] = DecToHex(t_day); for(i=12;i<14;i++) S_arr[i-12] = RX1_Buffer[i]; t_hour = strtod(S_arr,NULL); TAB_T[2] = DecToHex(t_hour); COM1.RX_Cnt = 0; } } void main(void) { while (1) { deal_uart(); for(i=0;i<) TX1_write2buff(TAB_T[i]); } } 求原因?
C语言 结构体指针字符 二进制文件写入和读取 指针字符输出错误
typedef struct s{ char *name; }student; /*将结构体读出并显示*/ int IsUsed(char *str) { FILE *fp = fopen("test","rb"); student s; s.name = (char*) malloc(sizeof(char)*20); fread(&s,sizeof(student),1,fp); while(!feof(fp)){ printf("%s",s.name); //为什么这里出错?????????????????? if(strcmp(s.name,str)==0){ fclose(fp); return 1; //存在该字符串,则返回1 } fread(&s,sizeof(student),1,fp); } fclose(fp); return 0; //不存在该字符串,则返回0 } int main() { FILE *fp = fopen("test","rb+"); /*先将结构体P存入二进制文件中*/ student p; p.name = (char*) malloc(sizeof(char)*20); scanf("%s",p.name); while(IsUsed(p.name)){ //检查员工号是否唯一 printf("该字符串已经存在,请更换一个:"); scanf("%s",p.name); } fwrite(&p,sizeof(student),1,fp); } 在printf哪里显示程序停止工作!!!!!!!!!求解啊
大一c语言的课程设计题目 有点小复杂 急急!
1. 学生成绩管理系统基本要求: 假设有1个班45人的成绩放在1个数组中。系统要求以随机函数生成学生成绩。系统能按照要求根据不同条件对学生成绩进行管理。 2. 系统模块及操作要求: (1) 编写一个成绩生成函数。使用随机数方法,利用随机函数生成学生的各门课程的成绩(每门课程的成绩都是0-100之间的整数),通过调用该函数生成全部学生的成绩。 (2) 先采用冒泡排序法,将学生成绩从高到低进行排序,再输入一个学生的成绩,将此成绩按照排序规律插入已排好序的学生成绩数组,最后将排好序的成绩单进行反序存放。 (3) 在函数中进行全班学生成绩从高到低排名, 排名方式根据函数的style参数进行,如style为‘a'按升序排序,style为 ' d ' 按降序排序。 (4) 用指针优化学生成绩排名。用指针实现数组的输入输出以及数组的排序(在函数中进行)。采用指针方法,输入字符串“ student score ”, 不使用 strcpy() 函数,自行编制函数实现复制该字符串并在第四步输出排序后的成绩单后下一行输出该字符串。 (5) 定义一个结构体数组,存放全班学生的学号,姓名,三门课的成绩,输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩,输出三门课程的平均分数最高的学生的学号、姓名及其平均分,再将全班学生按照平均分数从高到低用选择法进行排序,输出结果。 (6) 学生成绩文件管理。将全班学生的相关数据,存入文件中,再从文件中读出按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件中,再从文件中读取第 2 , 4 , 6 , 8 , 10 个学生的数据显示。![图片说明](https://img-ask.csdn.net/upload/201605/31/1464670799_705905.jpg)
怎么修改下面的代码,关于两数求和
``` #include<iostream> #include<string> #include<math.h> using namespace std; struct LinkNode { int data; //记录每个节点的整数(小于10000) LinkNode *next; //记录下一个节点的地址 LinkNode *prev; //记录前一个节点的地址 }; class LinkList { private: LinkNode *head0,*head1; //head0,head1分别记录两个整数链表的头指针 LinkNode *currptr; LinkNode *result; //result记录结果链表的头指针 public: LinkList(); //构造函数,初始化链表 ~LinkList(); //析构函数,释放空间 void Creat(string a); //引入字符串,创立两个链表,分别表示两个整数 void Add(); //实现两个整数相加 void Display(); //显示结果 void addtwo(); //节点多的作为被加数,少的作为加数,实现整数绝对值大的加小的 }; int sum(int n); LinkList::LinkList() //构造函数,初始化链表 { head0=new LinkNode; //申请一个空间记录整数的符号和节点数 head1=new LinkNode; head0->next=head0; head0->prev=head0; //初始化链表,建立双向循环链表 head1->next=head1; head1->prev=head1; result=new LinkNode; result->next=result; result->prev=result; currptr=NULL; } LinkList::~LinkList() //析构函数,释放空间 { LinkNode *p1=head0,*p2=head1,*p3=result; //三个指针分别指向三条链表的头指针 while(p1!=p1->prev) { p1->prev->next=p1->next; p1->next->prev=p1->prev; currptr=p1; p1=p1->next; delete currptr; } while(p2!=p2->prev) //逐个删除节点,释放空间 { p2->prev->next=p2->next; p2->next->prev=p2->prev; currptr=p2; p2=p2->next; delete currptr; } while(p3!=p3->prev) { p3->prev->next=p3->next; p3->next->prev=p3->prev; currptr=p3; p3=p3->next; delete currptr; } // 删除 p1,p2,p3; } void LinkList::Creat(string a) //引入字符串,创立两个链表,分别表示两个整数 { int i=0,j=0,m=0,n=0,k=0,l=0,s=0,w=0; //i记录字符串,j记录加数节点数;s记录被加数节点数,w标记字符串中的'-'号, //k记录字符串中的字符转化为整数的值,l使每个节点记录4位 while(a[m]!=';') m++; //m记录字符串中被加数的字符数 n=m; while(a[n]!='\0') n++; //n记录字符串的总字符数 if(a[0]=='-') { head0->data=(-1); //记录整数符号 w=1; } else {head0->data=1;} for(i=m-1;i>=w;i--) { if(a[i]!=',') //把字符转化为整数 { k+=(a[i]-'0')*sum(l); l++; } if(a[i]==','||i==w) { currptr=new LinkNode; //把整数存到双向循环链表中 currptr->data=k; currptr->next=head0; currptr->prev=head0->prev; head0->prev->next=currptr; head0->prev=currptr; head0=currptr; s++; //节点数加1 k=0; //重新初始化k和l l=0; } } head0->prev->data*=s; //存储整数符号和节点数 //与建第一个整数链表一样,建立第二个整数链表head1 k=0;l=0; if(a[m+1]=='-') { head1->data=(-1); m++; } else head1->data=1; for(i=n-1;i>m;i--) { if(a[i]!=',') { k+=(a[i]-'0')*sum(l); l++; } if(a[i]==','||i==m+1) { currptr=new LinkNode; currptr->data=k; currptr->next=head1; currptr->prev=head1->prev; head1->prev->next=currptr; head1->prev=currptr; head1=currptr; j++; k=0; l=0; } } head1->prev->data*=j; } void LinkList::Add() //实现两个整数相加 { LinkNode *temp; if(abs(head0->prev->data)>abs(head1->prev->data)) //两个整数中,绝对值大的为被加数 addtwo(); else if(abs(head0->prev->data)<abs(head1->prev->data)) { temp=head0; head0=head1; head1=temp; addtwo(); } else if(abs(head0->prev->data)==abs(head1->prev->data)) { int k1,k2; LinkNode *p=head0,*q=head1; //如果节点数相同,则判断节点中数值大小 while(p->data==q->data&&p!=head0->prev->prev&&q!=head1->prev->prev) { p=p->next; q=q->next; } k1=p->data; k2=q->data; if(k1>k2) addtwo(); else { temp=head0; head0=head1; head1=temp; addtwo(); } } } void LinkList::addtwo() //节点多的作为被加数,少的作为加数,实现整数绝对值大的加小的 //默认head0存的整数绝对值比head1大 { int s=0,m1=head0->data,m2=head1->data; m1=(head0->prev->data/abs(head0->prev->data)); //head0的符号 m2=(head1->prev->data/abs(head1->prev->data)); //head1的符号 LinkNode *p=head0->prev->prev,*q=head1->prev->prev; result->data=head0->prev->data; //存结果的节点数和符号 while(q!=head1->prev) //head0存的整数绝对值比head1大,即head0的节点数大于或等于head1 { currptr=new LinkNode; currptr->data=(p->data)*m1+(q->data)*m2+s; //两整数相加 if((m1*m2)>0) //如果符号相同 { if(abs(currptr->data)-10000>=0) //相加后超过10000,则进位 { s=currptr->data/10000; currptr->data=abs(currptr->data)%10000; } else //abs(currptr->data)-10000<0,不进位 { s=0; currptr->data=abs(currptr->data); } } else if(m1>0&&m2<0) //符号不同,在此相当于实现两个正整数相减 { s=0; if(currptr->data<0) //小于0,向前一位借1 { currptr->data+=10000; s=-1; } } else if(m1<0&&m2>0) //符号不同,在此相当于实现负整数加上正整数 { s=0; if(currptr->data>0) //大于0, { currptr->data=10000-currptr->data; s=1; } else currptr->data=abs(currptr->data); } currptr->next=result; //存入链表 currptr->prev=result->prev; result->prev->next=currptr; result->prev=currptr; result=currptr; p=p->prev; q=q->prev; } //当head0节点数比head1长时,继续建立链表 while(p!=head0->prev) { currptr=new LinkNode; currptr->data=p->data*m1+s; s=currptr->data/10000; if((m1*m2)>0) { if(abs(currptr->data)-10000>=0) { s=currptr->data/10000; currptr->data=abs(currptr->data)%10000; } else {s=0;currptr->data=abs(currptr->data);} } else if(m1>0&&m2<0) { s=0; if(currptr->data<0) { currptr->data+=10000; s=-1; } } else if(m1<0&&m2>0) { s=0; if(currptr->data>0) { currptr->data=10000-currptr->data; s=1; } else currptr->data=abs(currptr->data); } currptr->data=abs(currptr->data)%10000; currptr->next=result; currptr->prev=result->prev; result->prev->next=currptr; result->prev=currptr; result=currptr; p=p->prev; } if(s!=0) //处理相加后,进位问题 { currptr=new LinkNode; currptr->data=abs(s); currptr->next=result; currptr->prev=result->prev; result->prev->next=currptr; result->prev=currptr; result=currptr; result->prev->data=m1*(abs(result->prev->data)+1); } } void LinkList::Display() //显示结果 { LinkNode *p=result; int FuHao=result->prev->data/abs(result->prev->data);//结果的符号 while(p->data==0&&p!=result->prev->prev) //当运算后前几个节点的数据为0时,不输出 { p=p->next; result->prev->data=(abs(result->prev->data)-1)*FuHao; //结果记录非0节点数 } cout<<FuHao*p->data; //首先显示符号和第一个节点中的数 if(abs(result->prev->data)!=1) p=p->next; //判断非0节点数是否为1 while(p!=result->prev->prev) //继续输出 { cout<<","; //每4位一组,并用','隔开 cout.width(4); cout.fill('0'); cout<<p->data; p=p->next; } if(p==result->prev->prev&&abs(result->prev->data)!=1) //显示最后一个节点数据 { cout<<","; cout.width(4); cout.fill('0'); cout<<p->data; } cout<<endl; } int sum(int n) //计算10的乘方 { int i,s=1; for(i=1;i<=n;i++) { s=s*10; } return s; } int main() //主函数 { cout<<"* 任意长整数的加法 *\n\n"; cout<<"* 注意:输入时每四位用逗号隔开 *\n\n"; cout<<"* 如:123456789 *\n\n"; cout<<"* 输入格式为:1,2345,6789 *\n\n"; cout<<"* 两个数之间用';'隔开 *\n\n"; cout<<"\n"; string ch; cout<<"请输入整数1;整数2:\n"; cin>>ch; //输入任意长字符串 LinkList List; //定义链表对象 List.Creat(ch); //把字符串转化为整数,并存到链表中 List.Add(); //实现两个整数相加 cout<<"两整数的和为:"; List.Display(); //输出结果 } ``` 这个代码里输入两个数的时候要用“;”隔开,这个地方怎么改成让它分别输入两个数然后相加,我改成下面这种但前面格式好像不对,不知道怎么改 string ch1,ch2; cout<<"请输入整数1:\n"; cin>>ch1; cout<<"请输入整数2:\n"; cin>>ch2; LinkList List; List.Creat(ch1,ch2); List.Add(); cout<<"两整数的和为:"; List.Display(); }
如何区分汉字"錒"和其他英文字符
![实验用文档](https://img-ask.csdn.net/upload/201612/08/1481206562_510885.png) 程序所用文档如图,我需要处理这些数据,把它变成 ![预期结果](https://img-ask.csdn.net/upload/201612/08/1481206923_940592.png) 我的代码是这样的 ```cpp #include <iostream> #include <string> #include <fstream> #include <map> #include <cstdlib> using namespace std; bool isLetterOrNumber(const char &word); bool isChinese(const char &word); int main(int argc, char* argv[]) { // 首先要打开这个文件,用二进制形式 ifstream ifs("list_t.txt", ios::binary); // 需要把结果写入一个目标文件 ofstream ofs("hz_pinyin.txt", ios::binary); // 需要一个临时存储字符 char word; // 需要一个字符串存拼音 string pinyin; // 需要一个字符串存汉字 string chinese; // 我们需要通过汉字来检索拼音,所以需要一个从string到string的map map<string, string> table; // 错误处理,如果ifs指向NULL,结束程序 if (!ifs) { cerr << "文件打开错误,请检查" << endl; exit(0); } // 打开文件后看见了下面这一行 // a1 阿啊锕呵吖腌錒 // 文件指针开始移动 while (!ifs.eof()) { // 先读取当前位置的字符 ifs.read((char*)&word, 1); // 判断读到的字符是不是英文字符和数字(因为拼音是由英文字符和数字组成的) if (isLetterOrNumber(word)) // 錒的后一个字节内容是48h,到这一句会判断为真,连入pinyin,造成后面乱码 // 放入pinyin字符串 pinyin += word; // 判断读到的字符是不是中文 else if (isChinese(word)) { // 放入chinese字符串 chinese += word; // 判断中文字符串长度是否为2,如果为2,chinese为索引,pinyin为对应值,存入map if (chinese.size() == 2) { table[chinese] = pinyin; // 以<中文><拼音>形式存入新的文件 ofs.write(chinese.c_str(), chinese.size()); ofs.write(pinyin.c_str(), pinyin.size()); // 接着清空chinese字符串,以迎接下一个汉字 chinese.clear(); // 往目标文件写入一个回车 ofs.write("\r", 1); // 往目标文件写入一个换行 ofs.write("\n", 1); } } // 如果读到了0x0D,那么清空pinyin字符串,并接着读一个0x0A else if (word == 0x0D) { pinyin.clear(); ifs.read((char*)&word, 1); } } ifs.close(); ofs.close(); return 0; } bool isLetterOrNumber(const char &word) { if ((word >= '0' && word <= '9') || (word >= 'a' && word <= 'z') || (word >= 'A' && word <= 'Z')) return true; return false; } bool isChinese(const char &word) { if ((!isLetterOrNumber(word)) && (word != ' ') && (word != '\r') && (word != '\n')) return true; return false; } ``` 生成的结果是乱码。我用winhex查看了一下,问题发生在“錒”这个字上。錒的编码是"E5 48"它第二个字节的48正好是ASCII码中'H'的位置,也就是说,当word是"錒"的第二个字节,并且处理到 ``` cpp if (isLetterOrNumber(word)) ``` 会返回true,这个48就会按照英文来处理,放到拼音字符串中。 但是问题来了:既然"錒"的第二个字节是48,而48也在ASCII中,那么怎么才能区分出我想要的这个48是"錒"的第二字节,而不是'H'ASCII字符? PS:我感觉我的markdown语法好像没有错,为什么代码没有高亮 ![图片说明](https://img-ask.csdn.net/upload/201612/08/1481208269_236469.png)
把String存入Oracle表中的Blob类型的列?
<img src="/images/smiles/icon_wink.gif"/> <br />用java实现怎么做?是String字符串,不是图片或者文件。我试过几个方法,但是老师出现空指针异常。 <br />本人才疏学浅,望有才子指点。感激。
C++串口通信writefile()后为什么要Sleep,readfile()才能读取到数据?
各位朋友大家好,有一个项目需要用C++实现串口通信(采用同步方式因为需要轮询下位机)并将串口的数据通过socket发送给服务器,现在基本功能已经实现,还存在一个小bug。当上位机用writefile函数向下位机写数据时,需要在writefile后Sleep(75),接收readfile时才能读取到数据,不加延时数据则为空。我的readfile函数是单独开了一个级别高的线程来完成的。writefile和线程的代码如下,各位帮忙提提意见 ``` // 向串口写数据, 将缓冲区中的数据写入到串口 bool CSerialPort::WriteData(unsigned char *pData, int length) { int *pData1=new int; BOOL bResult = TRUE; DWORD BytesToSend = 0; if (m_hComm == INVALID_HANDLE_VALUE) { return false; } /** 临界区保护 */ EnterCriticalSection(&m_csCommunicationSync); /** 向缓冲区写入指定量的数据 */ bResult = WriteFile(m_hComm,/*文件句柄*/pData,/*用于保存读入数据的一个缓冲区*/ 9,/*要读入的字符数*/ &BytesToSend,/*指向实际读取字节数的指针*/ NULL); if (!bResult) { DWORD dwError = GetLastError(); /** 清空串口缓冲区 */ PurgeComm(m_hComm, PURGE_RXCLEAR | PURGE_RXABORT); LeaveCriticalSection(&m_csCommunicationSync); return false; } /** 离开临界区 */ LeaveCriticalSection(&m_csCommunicationSync); Sleep(75); return true; } ``` //串口监听线程 UINT WINAPI CSerialPort::ListenThread(void* pParam) { /** 得到本类的指针 */ CSerialPort *pSerialPort = reinterpret_cast<CSerialPort*>(pParam); // 线程循环,轮询方式读取串口数据 while (!pSerialPort->s_bExit) { UINT BytesInQue = pSerialPort->GetBytesInCOM(); /** 如果串口输入缓冲区中无数据,则休息一会再查询 */ for(int time=1;time<=3;time++){ if ((BytesInQue == 0)) { Sleep(SLEEP_TIME_INTERVAL); continue; } } /** 读取输入缓冲区中的数据并输出显示 */ //unsigned char cRecved = 0x00; unsigned char cRecved ; do { cRecved =0x00; if (pSerialPort->ReadChar(cRecved) == true) { // 定义字符串流,将后面的字符串按照对象存入到ss中并以空格键结束 std::stringstream ss; int tm = cRecved; // std::hex表示16进制输出流,即后面输出的为16进制的形式,setw(2)以两个字符的形式输出,setfill(0)不够两个字符的用0填充。 ss << std::hex << std::setw(2) << std::setfill('0') << tm; //减少传输数据大小,字符间不需空格 //ss << " "; // 转换成大写 string a = ss.str(); //string b; //transform(a.begin(), a.end(), back_inserter(b), ::toupper); // 显示占用时间,引起错误 //cout << b ; // 拼接传递给server recdata += a; continue; } } while (--BytesInQue); // 循环结束产生信号 setClientUploadEvents(); } return 0; } ``` //读取串口接收缓冲区中一个字节的数据 bool CSerialPort::ReadChar(unsigned char &cRecved) { BOOL bResult = TRUE; DWORD BytesRead = 0; DWORD Bytesnum = GetBytesInCOM(); if (m_hComm == INVALID_HANDLE_VALUE) { return false; } /** 临界区保护 */ EnterCriticalSection(&m_csCommunicationSync); /** 从缓冲区读取一个字节的数据 */ bResult = ReadFile(m_hComm, &cRecved, 1, &BytesRead, NULL); if ((!bResult)) { /** 获取错误码,可以根据该错误码查出错误原因 */ DWORD dwError = GetLastError(); /** 清空串口缓冲区 */ PurgeComm(m_hComm, PURGE_RXCLEAR | PURGE_RXABORT); LeaveCriticalSection(&m_csCommunicationSync); return false; } /** 离开临界区 */ LeaveCriticalSection(&m_csCommunicationSync); return (BytesRead == 1); } ``` 主函数代码: cout << mySerialPort.WriteData(temp, 9) << endl; WaitForSingleObject(hEvent, INFINITE); // 有信号执行下面语句 cout << 12345 << endl; mySerialPort.socketsend(recdata,1,sclient); recdata = "";
C语言单步调试中cannot access memory at address...
#include <stdio.h> #include <malloc.h> #include <string.h> typedef struct books { long ISBN; //图书ISBN float BPrice; //图书定价 char BNumber[10]; //图书索引号 规定索引号为首位大写字母,后三位数字“F390” char *BName; //图书名字 char *IsBorrow; //图书借阅状态 struct books *next; }MyBooks; //初始化 void BooksInitiate(MyBooks **head) { *head=(MyBooks *)malloc(sizeof(MyBooks)); (*head)->next=NULL; (*head)->ISBN=0; /*两个结构体变量在进行赋值时,不能直接通过变量名赋值,必须通过元素赋值 */ (*head)->BPrice=0; (*head)->BNumber[10]=0; (*head)->BName=" "; (*head)->IsBorrow=" "; } //根据输入位置插入图书 int BooksInsert(MyBooks *head) { MyBooks *p,*q; struct books bk; int j,i; p=head; j=-1; printf("请输入插入图书的位置:"); scanf("%d",&i); //输入图书的存储位置 printf("请输入图书的信息:\n"); printf("***************************\n"); printf("书名:"); scanf("%s",&bk.BName); printf("\n"); printf("ISBN:"); scanf("%d",&bk.ISBN); printf("\n"); printf("定价:"); scanf("%f",&bk.BPrice); printf("\n"); printf("索引号:"); scanf("%s",&bk.BNumber[10]); printf("\n"); printf("借阅状态:"); scanf("%s",&bk.IsBorrow); printf("****************************\n"); while(p->next!=NULL&&j<i-1) { p=p->next; j++; } if(j!=i-1) { printf("插入元素位置参数错误!"); return 0; } else { q=(MyBooks *)malloc(sizeof(MyBooks)); q->ISBN=bk.ISBN; q->BPrice=bk.BPrice; q->BNumber[10]=bk.BNumber[10]; q->BName=bk.BName; q->IsBorrow=bk.IsBorrow; q->next=p->next; p->next=q; printf("插入成功!\n"); return 1; //遇到return则结束程序 } } //根据书名查找图书 int BooksGet(MyBooks *head) { MyBooks *p; char *name; name = (char*)malloc(sizeof(char) * 100); //字符指针必须申请空间才能存储 p=head; //输入查找图书的名字 printf("请输入查询图书的名字:") ; scanf("%s",name); while(p->next!=NULL&&strcmp(p->BName,name)!=0) //在进行结构体内元素比较时,结构体内的元素必须初始化 { p=p->next; } if(strcmp(p->BName,name)==0) { //输出该图书信息 printf("书名:%s\n",p->BName); printf("ISBN:%d\n",p->ISBN); printf("定价:%f\n",p->BPrice); printf("索引号:%s\n",p->BNumber[10]); printf("借阅状态:%s\n",p->IsBorrow); return 1; } else { printf("对不起,无此书信息!\n"); } } //主函数 int main() { MyBooks *head; BooksInitiate(&head); BooksInsert(head); BooksGet(head); } 求大神们,帮忙看看,我用的是Dev c++,编译器并没有报错,主要问题在BooksGet()函数里,我单步调试的时候,第一次走到while(p->next!=NULL&&strcmp(p->BName,name)!=0),p->BName是我的初始值(一个空字符串),第二次走到p->BName的时候,是我存入的那个值(也就是“亲爱的生活”),这时候把鼠标放在p->BName上时,才显示cannot access memory ataddress 0x .......了。如果 强行下一步,就会弹出错误 Program receive signal SIGSEGV,Segmentation fault。 ![![图片说明](https://img-ask.csdn.net/upload/201706/21/1498058895_781850.png)图片说明](https://img-ask.csdn.net/upload/201706/21/1498058875_823545.png)
C语言初学者提问,不会修改程序
可以运行,但是达不到目的,不会修改 程序代码: typedef struct /* 学生结构 */ { short status; /* 数据状态,0:正常 1:删除 */ char number[10]; /* 学号 */ char name[20]; /* 姓名 */ char sex[3]; /* 性别 */ int age; /* 年龄 */ char place; /* 籍贯 */ char department; /* 系别 */ char major; /* 专业 */ int classnumber; /* 班级 */ }StudentType; void AddData(void); /* 增加数据 */ void ChangeData(void); /* 修改数据 */ void SearchData(void); /* 查找数据 */ void ListData(void); /* 显示数据 */ void PackData(void); /* 删除数据 */ #include<stdio.h> /* 标准输入输出文件包含预处理命令 */ #include<string.h> /* 字符串文件含预处理命令 */ #include<ctype.h> /* 包含tolower()的原型 */ #include<stdlib.h> /* 标准库文件包含预处理命令 */ FILE*fp; /* 声明文件指针 */ void AddData(void) /* 增加文件数据 */ { StudentType student; /* 学生 */ char tag; /* 设置标志是否继续增加 */ student.status=0; /* 数据状态,0:正常 1:删除 */ do { printf("学生学号:"); scanf("%s,student.number"); /* 输入学号 */ printf("学生姓名:"); scanf("%s,student.name"); /* 输入姓名 */ printf("学生性别:"); scanf("%s,student.sex"); /* 输入性别 */ printf("学生年龄:"); scanf("%d,student.age"); /* 输入年龄 */ printf("学生籍贯:"); scanf("%s,student.place"); /* 输入籍贯 */ printf("学生系别"); scanf("%s,student.department"); /* 输入系别 */ printf("学生专业:"); scanf("%s,student.major"); /*输入专业 */ printf("学生班级:"); scanf("%d,student.classnumber"); /* 输入班级 */ fseek(fp,0, SEEK_END); /* 移动文件内部指针 */ fwrite(&student,sizeof(StudentType),1,fp); /* 将图书信息存入文件中 */ printf("继续添加吗(y/n):"); while (getchar() !='\n'); /* 跳过当前行 */ tag=getchar(); /* y,Y表示继续,N,n表示结束 */ tag=tolower(tag); /* 大写字母转化为小写字母 */ while (tag !='y' && tag !='n') { /* 非法输入时重新输入 */ printf("输入非法,重新输入(y/n):"); while (getchar() !='\n'); /* 跳过当前行 */ tag=getchar(); /* y,Y表示继续,N,n表示结束 */ tag=tolower(tag); /* 大写字母转化为小写字母 */ } }while (tag=='y'); /* 肯定回答时循环 */ } void ChangeData(void) /* 更新数据 */ { StudentType student; /* 学生 */ char number[20]; /* 学生学号 */ printf("输入要更改的学生学号:"); scanf("%s",number); /* 输入学生学号 */ rewind(fp); /* 使位置指针返回到文件开头 */ fread(&student,sizeof(StudentType),1,fp); /* 读入学生信息 */ while(!feof(fp)) { /* 文件未结束 */ if(strcmp(student.number,number)==0 /* 学生学号相同 */ && student.status==0 /* 数据状态正常,未作删除标志 */ )break; /* 查询成功 */ fread(&student,sizeof(StudentType),1,fp); /* 读入学生信息 */ } if (!feof(fp)) { /* 查询成功 */ printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n","学生学号","学生姓名","学生性别","学生年龄","学生籍贯","学生系别","学生专业","学生班级"); printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n", /* 输出信息 */ student.number,student.name,student.sex,student.age,student.place,student.department,student.major,student.classnumber); printf("输入更改后的数据:\n"); printf("学生学号:"); scanf("%s,student.number"); /* 输入学号 */ printf("学生姓名:"); scanf("%s,student.name"); /* 输入姓名 */ printf("学生性别:"); scanf("%s,student.sex"); /* 输入性别 */ printf("学生年龄:"); scanf("%d,student.age"); /* 输入年龄 */ printf("学生籍贯:"); scanf("%s,student.place"); /* 输入籍贯 */ printf("学生系别"); scanf("%s,student.department"); /* 输入系别 */ printf("学生专业:"); scanf("%s,student.major"); /*输入专业 */ printf("学生班级:"); scanf("%d,student.classnumber"); /* 输入班级 fseek(fp,-sizeof(StudentType), SEEK_CUR); /* 移动文件内部指针 */ fwrite(&student, sizeof(StudentType),1,fp); /* 写入数据 */ } else { /* 查询失败 */ printf("无此编号的学生!\n"); clearerr(fp); /* 清除文件结束标志 */ } } void SearchData(void) { StudentType student; /* 查询数据 */ int select; /* 工作变量 */ char number[20]; /* 学号 */ char major[20]; /* 专业 */ printf("请选择:\n"); printf("1.按学号查询 2.按专业查询\n"); scanf("%d",&select); /* 输入选择 */ while (select<1||select>2) { printf("请输入1~2的数:"); /* 输入提示 */ scanf("%d,&select"); /* 输入选择 */ } switch (select) { case 1: /* 按学生学号查询 */ printf("请输入要查询的学生学号:"); scanf("%s",number); /* 输入学生的学号 */ rewind(fp); /* 使指针位置返回到文件的开头 */ fread(&student,sizeof(StudentType),1,fp); /* 读入学生信息 */ while (!feof(fp)) { /* 文件未结束 */ if(strcmp(student.number,number)==0 /* 学生学号相同 */ && student.status==0 /* 数据状态正常,没有删除标志 */ )break; /* 查询成功 */ fread(&student,sizeof(StudentType),1,fp); /* 读入学生信息 */ } break; case 2: printf("输入要查询的学生的专业:"); /* 按专业查询 */ scanf("%s",major); /* 输入学生专业 */ rewind(fp); /* 使指针返回文件的开头 */ fread(&student,sizeof(StudentType),1,fp); /* 读入学生的信息 */ while(!feof(fp)) { /* 文件未结束 */ if (strcmp(student.major,major)==0 /* 学生专业相同 */ && student.status==0 /* 数据状态正常,没有删除标志 */ ) break; /* 查询成功 */ fread(&student,sizeof(StudentType),1,fp); /* 读入学生信息 */ } break; } if (!feof(fp)) { /* 查询成功 */ printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n","学生学号","学生姓名","学生性别","学生年龄","学生籍贯","学生系别","学生专业","学生班级"); printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n", /* 输出信息 */ student.number,student.name,student.sex,student.age,student.place,student.department,student.major,student.classnumber); } else { /* 查询失败 */ printf("无此专业的学生!\n"); clearerr(fp); /* 清除文件结束标志 */ } } void DeleteData(void) /* 删除数据,只作删除标志 */ { StudentType student; /* 学生 */ char number[20]; /* 学生学号 */ printf("输入要更新的学生的学号:"); scanf("%s", number); /* 输入学生的学号 */ rewind(fp); /* 使位置指针返回文件的开头 */ fread(&student, sizeof(StudentType),1,fp); /* 读入学生的信息 */ while(!feof(fp)) { /* 文件未结束 */ if (strcmp(student.number, number)==0 /* 学生的学号相同 */ && student.status==0 /* 数据状态正常,未作删除标志 */ )break; /* 查询成功 */ fread(&student,sizeof(StudentType),1,fp); /* 读入学生信息 */ } if(!feof(fp)) { /* 查询成功 */ printf("被删除记录为:、n"); printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n","学生学号","学生姓名","学生性别","学生年龄","学生籍贯","学生系别","学生专业","学生班级"); printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n", /* 输出信息 */ student.number,student.name,student.sex,student.age,student.place,student.department,student.major,student.classnumber); student.status=1; fseek(fp,-sizeof(StudentType), SEEK_CUR); /* 移动文件内部指针 */ fwrite(&student, sizeof(StudentType),1,fp); /* 写入数据 */ } else { /* 查询失败 */ printf("无此编号的学生!\n"); clearerr(fp); /* 清除文件结束标志 */ } } void pack(void) /* 在物理上删除作有删除标记的记录 */ { StudentType student; /* 学生 */ FILE*fpTmp; /* 临时文件指针 */ if ((fpTmp=fopen("book_tmp.dat","wb"))==NULL) { /* 打开文件失败 */ printf("打开文件student_tmp.dat 失败!\n"); /* 错误信息 */ system("PAUSE"); /* 调用库函数system(),输出系统提示信息 */ exit(2); /* 退出程序 */ } rewind(fp); /* 使位置指针返回文件开头 */ fread(&student,sizeof(StudentType),1,fp); /* 读入学生信息 */ while (!feof(fp)) { /* 文件未结束 */ if(student.status==0) /*数据状态正常,未作删除标志 */ fwrite(&student,sizeof(StudentType),1,fpTmp); /* 写入数据 */ fread(&student,sizeof(StudentType),1,fp); /* 继续读入图书信息 */ } fclose(fp); fclose(fpTmp); /* 关闭文件 */ remove("student.dat"); /* 删除文件 */ rename("&student_tmp.dat","student.dat"); /* 更改文件名 */ if ((fp=fopen("student.dat","rb+"))==NULL) { /* 打开 employee.dat失败 */ printf("打开文件student.dat 失败!\n"); /* 错误信息 */ system("PAUSE"); /* 调用库函数system(),输出系统提示信息 */ exit(3); /* 退出程序 */ } } #include<stdio.h> /* 标准输入输出文件包含预处理命令 */ #include<stdlib.h> /* 标准库文件包含预处理命令 */ FILE*fp; /* 定义文件指针 */ int main(void) /* 主函数main() */ { int select; /* 工作变量 */ if ((fp=fopen("student.dat","rb+"))==NULL) { /* student.dat 文件不存在 */ if ((fp=fopen("student.dat","wb+"))==NULL) { /* 打开文件失败 */ printf("打开文件student.dat失败!\n"); /* 错误信息 */ system("PAUSE"); /* 调用库函数system(),输出系统提示信息 */ exit(1); /* 退出程序 */ } } do { printf("\n请选择:\n"); printf("1.增加数据 2.修改数据 3.查找数据 4.删除数据 5.重组数据 6.退出\n"); scanf("%d",&select); /* 输入选择 */ while (select<1||select>6) { printf("请输入1~6的数:"); /* 输入提示 */ scanf("%d",&select); /* 输入选择 */ } switch(select) { case 1: AddData(); /* 增加数据 */ break; case 2: ChangeData(); /* 修改数据 */ break; case 3: SearchData(); /* 查询数据 */ break; case 4: DeleteData(); /* 删除数据,只作删除标志 */ break; case 5: pack(); /* 物理上删除作有标记的记录 */ break; } }while (select!=6); /* 选择6退出循环 */ fclose(fp); /* 关闭文件 */ system("PAUSE"); /* 调用库函数system(),输出系统提示信息 */ return 0; /* 返回值0,返回操作系统 */ }
新人求助,c语言问题。
程序的功能是输入字符串存入pS指针,进行大小对比后按从小到大输出。发现当输入字符串超过5个时程序会停止运行,恳请哪位大神帮我看下代码有什么问题。 代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h> #define BUF_LEN 100 #define COUNT 5 int main(void) { char buf[BUF_LEN]; size_t str_count=0; size_t capacity=COUNT; char **pS=(char**)calloc(capacity,sizeof(char*)); char** psTemp=NULL; char* pTemp=NULL; size_t str_len=0; bool sorted=false; printf("Enter strings to be sorted,one per line.Press Enter to end:\n"); char *ptr=NULL; while(true) { ptr=fgets(buf,BUF_LEN,stdin); if(!ptr) { printf("Error reading string.\n"); free(pS); pS=NULL; return 1; } if(*ptr=='\n') break; if(str_count==capacity) { capacity+=capacity/4; if(!(psTemp=(char**)realloc(pS,capacity))) return 1; pS=psTemp; } str_len=strlen(buf)+1; if(!(pS[str_count]=(char*)malloc(str_len))) return 2; strcpy(pS[str_count++],buf); } while(!sorted) { sorted=true; for(size_t i=0;i<str_count;++i) { if(i==(str_count-1)) break; if(strcmp(pS[i],pS[i+1])>0) { sorted=false; pTemp=pS[i]; pS[i]=pS[i+1]; pS[i+1]=pTemp; } } } printf("Your input sorted in ascending sequence is:\n\n"); for(size_t k=0;k<str_count;++k) { printf("%s",pS[k]); free(pS[k]); pS[k]=NULL; } free(pS); pS=NULL; return 0; }
c语言数据结构词索引表出了点问题,谁能帮忙看看呀
#include<stdio.h> #include<string.h> #include<stdlib.h> #include <conio.h> #include <ctype.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define OVERFLOW -2 #define MaxBookNum 1000 //假设只对1000本书建立索引表(1000) #define MaxKeyNum 2500 //索引表的最大容量(2500) #define MaxLineLen 500 //书目串的最大长度(500) #define MaxWordNum 10 //词表的最大容量 #define MaxWordLength 30 //单词的最大长度 typedef int Status; typedef int ElemType; //定义链表的数据元素类型为整型 typedef int Boolean; typedef struct { char item[MaxWordNum][MaxWordLength]; //字符串的数组 int last; //词表的长度 }WordListType; //词表的类型(顺序表) typedef struct { char *ch; //如果是非空串,则按串长分配存储区,否则ch为NULL int length; //串长度 }HString; typedef struct LNode { ElemType data; struct LNode *next; }LNode,*Link,*Position; typedef struct { Link head,tail; int len; }LinkList; typedef struct { HString key; //关键词 LinkList bnolist; //存放书号索引的链表 }IdxTermType; //索引项类型 typedef struct { IdxTermType item[MaxKeyNum+1]; int last; }IdxListType; //索引表类型 //----------------主要变量-------------- char buf[MaxLineLen]; //书目串缓冲区 WordListType wdlist; //关键字词表 IdxListType idxlist; //索引表 char oftenwords[6][10] = {"an","a","of","and","to","the"}; /*******************************声明部分****************************************/ //--------------基本操作--------- void InitIdxList (IdxListType *idxlist); //初始化操作,置索引表idxlist为空表,且在idxlist.item[0]设一空串 void GetLine (FILE *f); //从文件F读入一个书目信息到书目串缓冲区buf void ExtractKeyWord (int *Num); //Status ExtractKeyWord(char* Buffer,WordListType *w,int *Num); //从buf中提取书名关键词到词表wdlist,书号存入bno Status InsIdxList (IdxListType *idxlist,ElemType bno); //将书号为bno的书名关键词按词典顺序插入索引表idxlist void PutText (FILE *g,IdxListType idxlist); //将生成的索引表idxlist输出到文件g //--------------为实现在索引表上进行插入,要先实现下列操作----------- void GetWord (int i,HString *wd); //用wd返回词表wdist中第i个关键词 int Locate (IdxListType *idxlist,HString wd,Boolean *b); //在索引表idxlist中查询是否存在与wd相等的关键词。若存在,则返回其在索引表 //中的位置,且b取值TRUE;否则返回插入位置,且b取值FALSE void InsertNewKey(int j,HString wd); //在索引表idxli的第i项上插入新关键词wd,并初始化书号索引的链表为空表 Status InsertBook (int i,int bno); //在索引表idxlist的第i项中插入书号为bno的索引 //------------串的堆分配存储表示----------- Status StrAssign(HString *T,char *chars); //生成一个其值等于串常量chars的串T int StrCompare(HString S,HString T); //若S>T,则返回值>0,若S=T,则返回值 = 0,若S<T,则返回值<0 Status StrCopy(HString *T, HString S); //由串S复制得串T //----------------带头结点的线性链表------------- Status InitList(LinkList *L); //构造一个空的线性链表L Status MakeNode(Link *p,ElemType e); //分配由p指向值e的结点,并返回OK;若分配失败,则返回ERROR Status Append (LinkList *L,Link s); //将指针s所指的一串结点链接在线性链表L的最后一个结点 //之后,改变链表L的尾指针指向新的尾结点 /*******************************函数部分****************************************/ Status StrAssign(HString *T,char *chars) { int i = strlen(chars); if((*T).ch) free((*T).ch); if(!i){ //若chars为空 (*T).ch = NULL; (*T).length = 0; } else{ //chars不空 if(!((*T).ch = (char *)malloc(i * sizeof(char)))) //为T分配chars所需的存储空间 exit(OVERFLOW); int count; for(count = 0;count <= i;count++) //把chars存入T中 (*T).ch[count] = chars[count]; (*T).length = i; } //else return OK; } void InitString(HString *T) { (*T).length = 0; (*T).ch = NULL; } int StrCompare(HString S,HString T) { int count; for(count = 0;count<S.length && count<T.length;count++){ if(S.ch[count] != T.ch[count]) return S.ch[count]-T.ch[count] ; } return S.length-T.length; } Status StrCopy(HString *T, HString S) { int j; if((*T).ch) free((*T).ch); //删除T串中原有值 (*T).ch = (char*)malloc(S.length * sizeof(char)); if(!(*T).ch) exit(OVERFLOW); for(j = 0; j <= S.length; j++) (*T).ch[j] = S.ch[j]; (*T).length = S.length; return OK; } Status InitList(LinkList *L) { Link p; p = (Link)malloc(sizeof(LNode)); if(!p) exit(OVERFLOW); p->next = NULL; (*L).head = (*L).tail = p; (*L).len = 0; return OK; } Status MakeNode(Link *p,ElemType e) { *p = (Link)malloc(sizeof(LNode)); if(!(*p)) exit(OVERFLOW); (*p)->data = e; (*p)->next = NULL; return OK; } Status Append (LinkList *L,Link s) { int i = 1; (*L).tail->next = s; while(s->next){ s = s->next; i++; } (*L).tail = s; (*L).len += i; return OK; } void GetWord(int i,HString *wd) { char *p; p = *(wdlist.item +i); StrAssign(wd,p); //生成关键字字符串 } int Locate(IdxListType *idxlist,HString wd,Boolean *b) { int i,m; for(i = (*idxlist).last-1; ( m=StrCompare((*idxlist).item[i].key,wd) ) >0; --i); if(m == 0){ //找到 *b = TRUE; return i; } else{ *b = FALSE; return i+1; } } void InsertNewKey(int j,HString wd) { int count; InitList(&idxlist.item[idxlist.last+1].bnolist); for(count = idxlist.last-1; count>=j; --count){ //后移索引项 idxlist.item[count+1] = idxlist.item[count]; } InitString(&idxlist.item[j].key); StrCopy(&idxlist.item[j].key,wd); //插入新的索引项 //串赋值 InitList(&idxlist.item[j].bnolist); //初始化书号索引表为空表 ++idxlist.last; } Status InsertBook (int i,int bookno) { Link p; if(!MakeNode(&p,bookno)) return ERROR; Append(&idxlist.item[i].bnolist,p); return OK; } Status InsertIdxList(IdxListType *idxlist,int bno) { int i,j; HString wd; Boolean b; InitString(&wd); for(i= 0;i<wdlist.last;++i){ GetWord(i,&wd); //获取wdlist中保存的单词 j = Locate(idxlist,wd,&b); //查找是否已存在于idxlist中 if(!b) //不存在 InsertNewKey(j,wd); //则插入新的关键词 InsertBook(j,bno); //插入书号 } return OK; } void InitIdxList (IdxListType *idxlist) { int i; (*idxlist).last = 0; for(i = 0;i<MaxKeyNum;i++){ InitList(&(*idxlist).item[i].bnolist); //初始化索引表项目中的书号的链表 } } void ExtractKeyWord (int *BookNum) { int i = 0,j = 0,k = 0,m; wdlist.last = 0; //很重要 Boolean Ignore; char TempChar[30]; for(m = 0;m<=30;m++) TempChar[m] = '\0'; //清空TempChat[] while(*(buf+i) !=' '){ //提取书目串缓冲区其中的书号 TempChar[i] = *(buf+i); //将书号以字符串类型保存在该数组中 i++; } TempChar[i] ='\0'; *BookNum = atoi(TempChar); //将书号转为int for(m = 0;m<=i;m++) TempChar[m] ='\0'; //清空TempChat[] i++; //推进一位,当前*(buf+i)开始为书名 while(*(buf+i) !='\n' && *(buf+i) != '\0'){ //每个字符串末尾都有结束符\n if(*(buf+i) != ' '){ //若非空字符 if(*(buf+i) >'A'&& *(buf+i) <= 'Z'){ *(buf+i) -= 'A' - 'a'; //若为大写,则转为小写 } TempChar[j] = *(buf+i); //把当前字符加入TempChar中//------------ j++; i++; } //if else{ //若为空字符,则检索当前TempChar中保存的字符串是否为常用词 Ignore = FALSE; //若Ignore为TRUE,则为常用词;为FALSE则不是常用词 for(m = 0;m<6;m++){ //查找是否为常用词 if(strcmp(TempChar,oftenwords[m]) == 0){ Ignore = TRUE; //是常用词 break; }//if }//for if(Ignore){ for(m = 0;m<=j;m++) TempChar[m] = '\0'; //清空TempChat[] i++; j = 0; }//if else{ //不是常用词 for(m = 0;m<=j;m++) //将该词插入wdlist中 wdlist.item[wdlist.last][m] = TempChar[m]; for(m = 0;m<=j;m++) TempChar[m] = '\0'; //清空TempChat[] k++; wdlist.last++; i++; j=0; }//else }//else }//while } void GetLine(FILE *f) { fgets(buf,MaxLineLen,f); } void PutText (FILE *g,IdxListType idxlist) { int i,j,k; Link p; for(i = 0;i<=idxlist.last;i++){ for(j = 0;j<idxlist.item[i].key.length; j++) putc(*(idxlist.item[i].key.ch + j),g); putc('\t',g); if(idxlist.item[i].key.length < 8) putc('\t',g); p = idxlist.item[i].bnolist.head; for(k = 0;k<idxlist.item[i].bnolist.len ; k++){ p = p->next; fprintf(g,"%03d",p->data); putc(' ',g); }//for putc('\n',g); }//for } void PrintFile(FILE *FileName) { char ch; rewind(FileName); ch = getc(FileName); while(ch != EOF){ putchar(ch); ch = getc(FileName); } printf("\n"); rewind(FileName); } /*******************************主函数部分**************************************/ int main() { FILE *f,*g; int ct; int BookNo; if((f = fopen("BookName.txt","r")) == NULL){ printf("ERROR in open BookName.txt\n"); exit(1); } if((g = fopen("KeyWordIndex_self.txt","w"))==NULL){ printf("ERROR in open KeyWordIndex_self.txt\n"); exit(1); } printf("书单文件:\n"); PrintFile(f); InitIdxList(&idxlist); WordListType w; while(!feof(f)){ GetLine(f); //读取书单文件中的一行到缓冲区 ExtractKeyWord(&BookNo); InsertIdxList(&idxlist,BookNo); } PutText(g,idxlist); fclose(f); fclose(g); printf("\n结果如下:\n"); if((g = fopen("KeyWordIndex_self.txt","r"))==NULL){ printf("ERROR in open KeyWorkIndex_self.txt\n"); exit(1); } PrintFile(g); fclose(g); return 0; }
130 个相见恨晚的超实用网站,一次性分享出来
相见恨晚的超实用网站 持续更新中。。。
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
      11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的 回答 - Bravo Yeung,获得该问题下回答中得最高赞(236赞和1枚专业勋章),对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalk
iOS Bug 太多,苹果终于坐不住了!
开源的 Android 和闭源的 iOS,作为用户的你,更偏向哪一个呢? 整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 毋庸置疑,当前移动设备操作系统市场中,Android 和 iOS 作为两大阵营,在相互竞争的同时不断演进。不过一直以来,开源的 Android 吸引了无数的手机厂商涌入其中,为其生态带来了百花齐放的盛景,但和神秘且闭源的 iOS 系统相比,不少网友
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
为什么你学不过动态规划?告别动态规划,谈谈我的经验
动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看 0-1 背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递归,谈谈我的经验 对于动态规划,春招秋招时好多题都会用到动态...
(经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
今年正式步入了大四,离毕业也只剩半年多的时间,回想一下大学四年,感觉自己走了不少弯路,今天就来分享一下自己大学的学习经历,也希望其他人能不要走我走错的路。 (一)初进校园 刚进入大学的时候自己完全就相信了高中老师的话:“进入大学你们就轻松了”。因此在大一的时候自己学习的激情早就被抛地一干二净,每天不是在寝室里玩游戏就是出门游玩,不过好在自己大学时买的第一台笔记本性能并不是很好,也没让我彻底沉...
使用 Angular 打造微前端架构的 ToB 企业级应用
这篇文章其实已经准备了11个月了,因为虽然我们年初就开始使用 Angular 的微前端架构,但是产品一直没有正式发布,无法通过生产环境实践验证可行性,11月16日我们的产品正式灰度发布,所以是时候分享一下我们在使用 Angular 微前端这条路上的心得(踩过的坑)了额,希望和 Angular 社区一起成长一起进步,如果你对微前端有一定的了解并且已经在项目中尝试了可以忽略前面的章节。 什么是微前...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
拿下微软、Google、Adobe,印度为何盛产科技圈 CEO?
作者 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 世界500强中,30%的掌舵人,都是印度人。 是的,你没看错。这是近日《哈佛商业评论》的研究结果。 其中又以微软CEO萨提亚·纳德拉(Satya Nadella)、和谷歌CEO桑达尔·皮查伊(Sundar Pichai,以下简称劈柴)最为出名。 微软CEO萨提亚·纳德拉(Satya Nadella) 其他著名印度...
程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
一文带你入门Linux
文章目录1.1 Linux的概述:1.1.1 什么是Linux:1.1.1.1 学习Linux之前先了解Unix1.1.1.2 Linux的概述:1.1.1.3 Linux的历史:1.1.1.4 Linux系统的应用:1.1.1.5 Linux的版本1.1.1.6 Linux的主流版本1.2 Linux的安装:1.2.1 虚拟机安装:1.2.1.1 什么是虚拟机1.2.1.2 安装VmWare1....
普通三本毕业,我怎么一路艰辛进入阿里的
英雄不问出处? 自古以来就有这样一句话,真的英雄不问出处吗?这句话太挫了。普通三本院校的我,大四的时候居然都不知道什么是校招,所以出处太重要了。这也是没有机会参加阿里校招的原因,毕竟校招门槛比社招还是要低的,最重要的是校招进入阿里能让你的起点比别人更高。 有幸可以社招进入阿里,了解了校招的思路,赶紧介绍给学弟们,现在我们三本院校的小学弟今年居然有 3 个人通过了阿里的校招。下面我也把这份宝贵的经...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
强烈推荐10本程序员在家读的书
很遗憾,这个春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终将会...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
关于2020年个人项目【臻美_疫情实时大数据报告】(项目开源)
本项目开源,供大家学习交流,数据来自官方通报。 项目网址: 点这可以查看项目 项目图例: 1、国内疫情(省) 2、国内疫情(市) 3、国外疫情 4、热点消息、辟谣消息 5、防疫知识 源码奉上: 本项目后台使用node.js app.js var originRequest = require('request'); var iconv = require('iconv-lite'...
[数据结构与算法] 排序算法
终于学习到了算法部分, 在学习算法时, 我们还是应该回顾一下数据结构与算法之间的关系 数据结构是研究数据的组织方式, 是算法的基础 算法是解决编程问题的方法论, 是程序的灵魂 程序= 数据结构+算法 排序算法 排序也称排序算法(Sort algorithm). 是指 将一组数据按照指定顺序进行排列的过程 主要分为内部排序和外部排序 内部排序: 指将需要处理的数据加载到内存中进行排序 外部排序...
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
智力题(程序员面试经典)
NO.1  有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸。给你一台称重精准的天平,怎么找出比较重的那瓶药丸?天平只能用一次。 解法 有时候,严格的限制条件有可能反倒是解题的线索。在这个问题中,限制条件是天平只能用一次。 因为天平只能用一次,我们也得以知道一个有趣的事实:一次必须同时称很多药丸,其实更准确地说,是必须从19瓶拿出药丸进行称重。否则,如果跳过两瓶或更多瓶药...
自学python网络爬虫,从小白快速成长,分别实现静态网页爬取,下载meiztu中图片;动态网页爬取,下载burberry官网所有当季新品图片。
文章目录 1.前言 2.知识储备 3.爬取静态网站 4.爬取动态网站 1.前言 近日疫情严重,手机已经玩吐了,闲着无聊逛衣服品牌官网发现,结果一时兴起,想学一学python,写一个爬虫下载官网所有最新上架的衣服图片和价格;说干就干,但身为一个只学过一些c和c++的python 0基础大二小白,csdn上的各种教程里涉及的各种发法、工具和库让我眼花缭乱;因此走了很多弯路,终于花三天时间完成了爬虫的设...
面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他
初识 MyBatis MyBatis 是第一个支持自定义 SQL、存储过程和高级映射的类持久框架。MyBatis 消除了大部分 JDBC 的样板代码、手动设置参数以及检索结果。MyBatis 能够支持简单的 XML 和注解配置规则。使 Map 接口和 POJO 类映射到数据库字段和记录。 MyBatis 的特点 那么 MyBatis 具有什么特点呢?或许我们可以从如下几个方面来描述 MyBati...
对Tomcat的简单概要小结
首先我们必须得知道Tomcat就是一个服务,一个本地服务,我们可以控制启动和停止,我们程序员通过这个服务主要是用来存放我们的java程序,当我们把Java程序放进Tomcat服务中,一旦Tomcat服务启动起来,其他电脑就可以进行网络连通,也就是说其他电脑也可以共同访问这个Java程序。 Tomcat的主要目录的概念 有上面的概念之后,我们再来知道一下tomcat根目录下都有哪些文件,以及这些文...
程序员回家过年,外婆说没带女朋友别回来了?喝了老爸89年的酒,当场反目。
点赞再看,养成习惯,微信搜索【三太子敖丙】关注这个被微信官方推荐过的逗比 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点系统复习,希望我们一起有点东西。 注:本文是水日常的文章,不是技术文,看技术的同学可以右划了。 今天是除夕,帅丙也不水太多东西了,先祝大家...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
Java实现多线程的三种方式
在Java中可通过三种方式来实现多线程:1、继承Thread类,重写run( )方法;2、实现Runnable接口,重写run( )方法;3、实现Callable接口,重写call( )方法并使用FutureTask获取call( )方法的返回结果
相关热词 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数 c#日期精确到分钟 c#自定义异常必须继承 c#查表并返回值 c# 动态 表达式树 c# 监控方法耗时 c# listbox c#chart显示滚动条
立即提问

相似问题

1
编写函数del(char str[])将字符串str中的除头部前导*和后字符数删除后的字符串,
2
用函数编程实现两个数组数值的交换,要求要用到指针?
1
用指针数组 对字符串排序,怎么实现?
1
利用指针写一函数,实现一长字符串中两短字符串交换,从主函数输入待替换的长字符串以及替换前后两个子串?
3
C++ 用指针数组处理若干个字符串,要求去除其中重复的字符串,每种字符串只保留一个。
5
一个关于字符串函数问题
3
C语言无法读取出指针数组里的字符串
2
输入一个字符串,使用指针删除串中的空格,并输出. 咋做啊,限制太多了。
0
输入字符串a,用指针,将其中数字,字母分别剔除并按原来顺序字符串b和c里,最后分别输出a,b,c三个字符串
2
C语法问题,二维字符串数组,无下标
1
为什么 使用指针修改字符串中的字符 运行结果出问题?
1
c语言实现删除操作的方法
1
为什么键盘输入字符串和文件导入字符串都有错?错误应该怎么改?
1
如何实现 链表的头结点是指针数组,再用二级指针调用?
1
怎么用成员指针变量实现字符串拼接?
1
指针数组对字符串排序 我的代码有什么问题
2
C语言如何提取命令行输入的字符串中的整数,并传递到自定义函数?
3
这里面用二维数组存储字符串,数组的两个括号里的数字分别代表什么意思?网上搜没看懂
1
C++使用字符指针数组时遇到缓冲区溢出warning,c6385,c6386,c6001
1
将有多个字符串和空格组成的字符串分离成单独的字符串