cin.get()这里是什么意思 10C

unsigned int size = 0;//初始化车子的数量
cout << "How many cars do you wish to catalog? ";
cin >> size;//输入车辆
cin.get();//???

//等价于 struct car* pcar = new struct car[size];
car* pcar = new car[size];//结构数组,根据输入的车辆来改变,数组
for (unsigned int i = 0; i < size; i++)
{             
    cout << "Car #" << i + 1 << ":" << endl;
    cout << "Please enter the make: ";
    getline(cin, pcar[i].company);

    cout << "Please enter the year make: ";
    cin >> pcar[i].pro_year;
    cin.get();
}
c++

4个回答

cin.get();这一行为了吃掉多余的回车符。

https://blog.csdn.net/qq_36182852/article/details/88098810

cin>>输入内容和回车进入输入缓冲区;空格和回车都可以区分数据,读取完成后指针停留在回车前边。
这里如果没有cin.get();如果下边有读取程序cin.get()或者cin.getline等等将会浪费一次输入次数来跳过回车符号。

如果不用,回车这个符号会影响下面的输入,你可以去掉试试。

你用到了getline函数,这个函数的功能是返回输入流从当前位置到第一个回车符的字符(即读取一整行),而同时你还只用了cin>>这样的标准输入。
标准输入会自动跳过空格和回车,但是读完一个部分后不会清除后续的空格和回车,这样的操作会对后面的非标准输入产生影响,如下

//'_'表示空格,'<'表示回车
//初始输入流
"123_456<123456<"
//读入第一个数123后
"_456<123456<"
//读入第二个数456后
"<123456<"

这样读入虽然可以自动将空格和回车视为分割符,但是会保留最后的分割符,如果这时候连续调用getline,得到的结果如下

//第一次输出("")后
"123456<"
//第二次输出("123456")后
""

即getline会将标准输入剩下的回车当做一行的终止符,而其实是上一个标准输入的结束符,等于是空行。
因此需要应cin.get输入下一个字符来让getline正常工作。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++书上例题运行出现问题
我是用vs2013调试运行的 ``` #include <iostream> using namespace std; class Student { private: int num; int score; public: void setdata() { cin >> num; cin >> score; } void display() { cout << "num : " << num << endl; cout << "score = " << score << endl; } }; Student stud1, stud2; int main() { stud1.setdata(); stud2.setdata(); //老是运行到这里就自动跳过了 stud1.display(); stud2.display(); //这两条语句能正常输出,第一个输出正常,第二个输出都是0 cin.get(); cin.get(); //两个cin.get()在程序中也不起作用了 return 0; } ``` 初学C++请教各位大神,注释中的问题是怎么回事,怎么解决。 2017-7-12 找了几天问题,终于弄懂了,当时我输入数据时,给"score"输入的是98.5,是个浮点数,而"score"是int型,由此产生了“意想不到”的结果。 后又发现,不管是用cin语句输入,还是用scanf_s语句输入,都是同样的运行结果,会莫名其妙跳过。 随后把后面修改成了 ``` printf_s("%d\n", cin.get()); printf_s("%d\n", cin.get()); printf_s("%d\n", cin.get()); cin.get(); ``` 运行结果是 ![图片说明](https://img-ask.csdn.net/upload/201707/12/1499854541_145753.jpg) 可以看到最后的三个cin.get()接收了几个莫名的东西。 后来查资料又看到“当cin尝试将输入的double型数字读为int型数据失败后,会产生一个错误状态--cin.fail().而要用cin读取输入流中的数据,输入流必须处于无错误状态。”推测是在我输入浮点数给int型变量后,cin或者scanf_s使缓冲区出了些问题。 由此,我改动了下setdata()函数: ``` void setdata() { cin.clear(); //想用它清空缓冲区 cin >>num; cin >>score; } ``` 运行后发现并不能解决跳过问题。 查资料,又改了下: ``` void setdata() { cin.clear(); cin.sync(); //不理解为什么一定要加这个 scanf_s("%d", &num); scanf_s("%d", &score); } ``` 这样修改后,才没有跳过,保证了正常的输入。 其实很简单,输入的数据类型不符导致的错误,输对就好了,以上都是钻牛角尖TT 之所以采纳下面那位大大的回答,不是说完全解决了问题,而是给了思路,非常感谢所有回答的热心的人。
为什么cin对fail的检查总是滞后一位?
下面是我的代码: int main() { using namespace std; char ch; int count = 0; cout << "Enter a sentence : "; while (ch=cin.get()!=EOF) count++; cout << "The last ch is: " << ch << endl; cout << "You have entered " << count << " chars." << endl; return 0; } 如果输入是“I”+<EOF>,那么这里的输入总是对EOF没有反应,无法终止循环,再单独输入一个EOF才能终止;如果直接输入EOF反而可以直接终止,有哪位大牛能说明一下为什么会这样?
【C++】各位大神来帮忙看看这里
#include<iostream> struct CandyBar { char brand[30]; double weight; int heat; }; void set(CandyBar & cb,char * b="Millennium Munch",double w=2.85,int h=350); void show(const CandyBar & cb); int main() { using namespace std; CandyBar cb; cout<<"是否重设CandyBar?(Y/N)"; char ch; cin>>ch; if(ch=='Y'||ch=='y') { cout<<"\n品牌:"; char b[30]; cin.getline(b,30); cout<<"\n重量:"; double w; cin>>w; cout<<"\n热量:"; int h; cin>>h; set(cb,b,w,h); show(cb); } else if(ch=='N'||ch=='n') { cout<<endl; set(cb); show(cb); } else cout<<"\n傻逼!"; cin.get(); cin.get(); return 0; } void set(CandyBar & cb,char * b,double w,int h) { 怎么将b赋值给cb.brand? cb.weight=w; cb.heat=h; } void show(const CandyBar & cb) { using std::cout; using std::endl; cout<<endl<<cb.brand <<endl<<cb.weight <<endl<<cb.heat<<endl; } 卡在赋值那里了 改了很久都没改对 要么类型不匹配要么不是左值 主要是不知道怎么用 new来分配
C++指针问题,求大神解决!万分感激!!
#include <iostream> using namespace std; int main() { cout << "共多少位捐款者(输入 0 程序结束):"; int sum; cin >> sum; cin.get(); if ( sum > 0 ) { information * donor = new information[sum]; for ( int number = 0; number < sum; ++number) { cout << number + 1 << ")位捐款者:"; getline(cin, donor[number].name); cout << " 捐款数额:"; while( !( cin >> (donor+number)->momey ) || (donor+number)->momey <= 0 ) { cin.clear(); while ( cin.get() != '\n' ) { continue; } cout << "请输入( > 0 )的数字:"; } cin.get(); } cout << "\n重要捐款者(Grand Patrons):\n"; int grand_patrons = 0; for ( int gp = 0; gp < sum; ++gp ) { if ( donor[gp].momey > GRAND ) { cout << gp + 1 << ")捐款者:" << donor[gp].name << " 捐款数额:" << donor[gp].momey << endl; ++grand_patrons; } } if ( grand_patrons == 0 ){cout << "无(none)。\n";} cout << "\n其他捐款者(Patrons):\n"; if ( grand_patrons != sum ) { for ( int gp = 0; gp < sum; ++gp ) { if ( donor[gp].momey <= GRAND ) { cout << gp + 1 << ")捐款者:" << donor[gp].name << " 捐款数额:" << donor[gp].momey << endl; } } } else { cout << "无(none)。\n"; } cout << endl; delete [] donor; } else{cout << "无(none)。\n";} return 0; } ** while( !( cin >> (donor+number)->momey ) || (donor+number)->momey <= 0 )** //就这里有问题,为啥是donor+number?是要移位吗?还是??
c++初学者一枚,希望有好心人能够帮我解答这行代码的意思
该题为c++ primer plus 书籍中 第七章课后习题 这个double * fill_array(double *pfirst, double *pend)函数体中, 最后的return 返回了一个 --ptemp; 为什么要反回这个,这个位置有点看不懂,反回--ptemp是反回的什么东西?指针地址的自减吗? 另外: if (!cin) // bad input { cin.clear(); while (cin.get() != '\n') continue; cout << "Bad input; input process terminated.\n"; if(i == 0) return ptemp; else return --ptemp; } 这里也有 return --ptemp; 希望能有朋友帮我解答疑惑,感激不尽,为何要反回这个呢! #include <iostream> const int Max = 5; // function prototypes double * fill_array(double *pfirst, double *pend); void show_array( double *pfirst, double *pend); void revalue(double *pfirst, double *pend, double r); int main() { using namespace std; double properties[Max]; double *pos = fill_array(properties, properties+(Max-1)); show_array(properties, properties+(Max-1)); cout << "Enter revaluation factor: "; double factor; cin >> factor; revalue(properties, properties+(Max-1), factor); show_array(properties, properties+(Max-1)); cout << "Done.\n"; return 0; } double * fill_array(double *pfirst, double *pend) { using namespace std; double temp; double * ptemp; int i = 0; for (ptemp = pfirst; ptemp <= pend; ptemp++) { cout << "Enter value #" << (i + 1) << ": "; cin >> temp; if (!cin) // bad input { cin.clear(); while (cin.get() != '\n') continue; cout << "Bad input; input process terminated.\n"; if(i == 0) return ptemp; else return --ptemp; } else if (temp < 0) // signal to terminate break; pfirst[i] = temp; i++; } return --ptemp; } // the following function can use, but not alter, // the array whose address is pfirst void show_array( double *pfirst, double *pend) { using namespace std; double * ptemp; int i = 0; for (ptemp = pfirst; ptemp <= pend; ptemp++,i++) { cout << "Property #" << (i + 1) << ": $"; cout << *ptemp << endl; } } // multiplies each element of ptemp by r void revalue(double *pfirst, double *pend, double r) { double *ptemp; for (ptemp = pfirst; ptemp <= pend; ptemp++) *ptemp *= r; }
C++ 指针的问题...这个真是莫名其妙了。。。
#include <iostream> const char * mid(const char *dst, int n, int m) {char *esd; int len = strlen(dst); if (n > len - 1 || m > len - n || m<1) { return dst; } else { esd = new char[m]; for (int i = 0; i < m; i++){ esd[i] = dst[n + i]; } return esd; } } int main(){ const char *aaa = "woshizhongguoren"; const char *aac= mid(aaa,1, 4); std::string kksd = (std::string)aac; printf("%s,%s", kksd, kksd); delete[] aac; std::cin.get(); } 代码如上,目的是截取一段字符出来,为什么最后输出字符串,两个kksd,得到的不一样?第二个正确,第一个乱码... 求大神指导..再就是我这里这个new 和delete 这么用...有问题么?
c++新手。请大佬帮忙看看。小问题。问题在下面
这里有个程序的开头部分: #include <iostream> #include<cstring> #include<memory.h> #include<limits.h> using namespace std; int main() {  int len;      cout << "请输入长度" << endl;      cin>>len;      int lenword,j,i;      char *essay = new char[len+1];      char *pun= new char[4];      char* useless=new char[4];      char**word;     cout<<"请输入敏感字符个数";     cin>>lenword;     cin.ignore(INT_MAX,'\n');     cout <<"请输入三个标点" ;     for( i=0;i<3;i++)     {cin>>pun[i];} cin.ignore(INT_MAX,'\n'); cout<<"请输入三个无用字符"; for (i=0;i<3;i++) {    cin>>useless[i]; }    word=new char*[lenword];    for(i=0;i<lenword;i++)    {word[i]=new char[len+1];     memset(word[i],0,(len+1));    }    cin.ignore(INT_MAX,'\n');    cout<<"请输入敏感字符并以空格间隔";     for(i=0;i<lenword;i++)       {cin>>*word[i];}   for(i=0;i<lenword;i++)   cout<<*word[i];    cout<<"请输入文章";    cin.ignore(INT_MAX,'\n');    for(i=0;i<len;i++)    essay[i]=cin.get();     //长度的判断     i=0;     while(essay[i]!='\0')     {         i++;     }      {cout<<i;       if (i>len+1)       {cout<<"输入不符合要求";      return 0;}      } 我有个问题是:比如我输入了 len=9 为什么  i 输出时候是12 ???
Xapian C++中的应用问题
create.cpp创建数据库并写数据 #include <xapian.h> // 头文件 #include <iostream> #include <string> #include <cstdlib> // For exit(). #include <cstring> using namespace std; #define INDEX_PATH "./index_data" int main(int argc, char **argv) { try { // 创建或者打开一个可读写的数据库 Xapian::WritableDatabase db(INDEX_PATH, Xapian::DB_CREATE_OR_OPEN); // 分词器 Xapian::TermGenerator indexer; string para; int flag = 0; while (flag++ < 8) { string line; if (cin.eof()) { if (para.empty()) break; } else { getline(cin, line); } if (line.empty()) { if (!para.empty()) { // 生成一个文档 Xapian::Document doc; doc.set_data(para); // 定义文档数据,这些数据对于用户来说是不透明的,用户可以在这里定义文档的一些属性,或URI,路径等信息 // 设置文档,分词 indexer.set_document(doc); indexer.index_text(para); // Add the document to the database. // 把文档加入数据库 db.add_document(doc); para.resize(0); } } else { if (!para.empty()) para += ' '; para += line; } } db.flush(); } catch (const Xapian::Error &e) { cout << e.get_description() << endl; exit(1); } } query.cpp查询数据库 #include <xapian.h> #include <iostream> #include <string> #include <cstdlib> // For exit(). #include <cstring> using namespace std; #define INDEX_PATH "./index_data" int main(int argc, char **argv) { if (argc != 2) { cout<<"Usage:"<<argv[0]<<" QUERY_STRING"<<endl; exit(0); } try { //打开数据库 Xapian::Database db(INDEX_PATH); // Start an enquire session. // 生成查询会话 Xapian::Enquire enquire(db); string query_string(argv[1]); Xapian::QueryParser qp; qp.set_database(db); qp.set_stemming_strategy(Xapian::QueryParser::STEM_SOME); // 解析查询条件 Xapian::Query query = qp.parse_query(query_string); cout << "Parsed query is: " << query.get_description() << endl; // 把解析后的查询条件放入查询会话 enquire.set_query(query); // 得到查询结果 Xapian::MSet matches = enquire.get_mset(0, 10); // Display the results. cout << matches.get_matches_estimated() << " results found.\n"; cout << "Matches 1-" << matches.size() << ":\n" << endl; // 得到查询结果 for (Xapian::MSetIterator i = matches.begin(); i != matches.end(); ++i) { cout << i.get_rank() + 1 << ": " << i.get_percent() << "% docid=" << *i << " [" << i.get_document().get_data() << "]\n\n"; } } catch (const Xapian::Error &e) { cout << e.get_description() << endl; exit(1); } return 0; } 当我编译成功后运行./create [root@localhost new]# ./create qwe qweqw qweqw qweqw qweqw qweqw qweqw qweqw 写入数据完毕 [root@localhost new]# ./query qwe Parsed query is: Xapian::Query(qwe:(pos=1)) 0 results found. Matches 1-0: 查询的时候就是查询不到 这是为什么呢 一下是我index_data的内容 [root@localhost index_data]# ll 总计 16 -rw-r--r-- 1 root root 0 02-11 10:53 flintlock -rw-r--r-- 1 root root 28 02-11 09:47 iamchert -rw-r--r-- 1 root root 13 02-11 09:47 postlist.baseA -rw-r--r-- 1 root root 0 02-11 09:47 postlist.DB -rw-r--r-- 1 root root 13 02-11 09:47 record.baseA -rw-r--r-- 1 root root 0 02-11 09:47 record.DB -rw-r--r-- 1 root root 13 02-11 09:47 termlist.baseA -rw-r--r-- 1 root root 0 02-11 09:47 termlist.DB
C++继承含有友元函数的基类后,子类对象模型问题
template<typename T> class less{ friend bool operator==<T>(const T& l, const T& r); public: less() {} ~less() {} }; class point : less<point> { friend bool operator< (const point& l, const point& r); point () {} ~point() {} private: int x; }; void main() { point one(5); point two(6); cout << (one < two) << endl; cout << (one == two) << endl; cin.get(); } 手动定义了< 操作符,而继承了一个定义了 == 的友元模板函数的模板类(为了简洁点,函数定义我这里没给出)。 求教各位大神,为什么在 one == two 执行时,编译器会找到 less 类的 == 函数中去,子类point中定义了一个friend < 操作符函数,而 less中定了一个 == 的模板函数,继承的是point的一个实例。 简化一下我的问题,我想透彻了解一下编译器调用函数的行为,如何通过子类point对象找到基类中 == 操作符函数的。 也可以给我推荐一下关于这方面的书籍,深入友元内部实现的。
为什么编译突然无效?
今天遇到一个诡异的问题,稍微分享一下,目前没找到原因。 之前Playsound函数好不容易搞懂,于是在程序里加了一个声音。 之后,我把这行代码删掉,编译运行后还是一个样。这时我还没怎么在意,用查找功能,发现我的这个程序里根本没有Playsound。于是我知道了事情的严重性。我把main函数里面的东西全删光,编译运行后还是这样! 我怕编译器不能自己覆盖文件了,于是把exe也删掉。编译运行后,还是这样!我把这些代码放在其他文件上没事,放这里就有事了! 我的DEVc++怕不是有毒! 之前(此时Playsound已经被删): ``` #include"psw.cpp" #include<cstdio> #include <string> #include <stdlib.h> #include <windows.h> #include <mmsystem.h> #pragma comment(lib,"winmm.dll.lib") #include<direct.h> #include<algorithm> #include<conio.h> //#include<bits/stdc++.h> //using namespace std; class wordcard{ public: string first_heading; string second_heading; string word; string meaning; string sound; int pre; int next; void give(string a,string b,string c,string d,int n,string e=""){ first_heading=a; second_heading=b; word=c; meaning=d; sound=e; pre=n-1; next=n+1; } void Clear() { first_heading=""; second_heading=""; word=""; meaning=""; } }word[100000],tword[100000]; string get_path() { char buffer[10000]; getcwd(buffer,10000); string ans=buffer; return ans; } bool Change=true,Round=true; string listname[10000],tstr,first[2],second[2]; int p,tn,pp,head,nlist; bool lock=1; int main(){ srand(time(NULL)); while(Round) { if(Change) { while(1) { cout<<"listname of the next list:"; cin>>tstr; if(tstr=="LOCK.") lock=1; else if(tstr=="UNLOCK.") lock=0; else break; } nlist=pswstr::sprt(tstr,listname,'+'); p=0; for(int i=0;i<nlist;i++) { listname[i]+=".txt"; ifstream file1; file1.open(listname[i].data()); cout<<listname[i]<<" has been opened."<<endl; while(1) { file1>>tstr; if(tstr=="EOF") break; else if(tstr[0]=='$') pswstr::sprt(tstr,first,'$'); else if(tstr[0]=='#') pswstr::sprt(tstr,second,'#'); else { tword[p].give(first[0],second[0],tstr,"",p); file1>>tstr; tword[p++].meaning=tstr; } } file1.close(); cout<<listname[i]<<" 's words have been loaded."<<endl; //system("cls"); } } for(int i=0;i<100000;i++) word[i]=tword[i]; head=0; for(int i=0;i<p;i++) { pp=head; tn=rand()%(p-i); for(int j=0;j<tn;j++) pp=word[pp].next; cout<<word[pp].first_heading<<endl<<word[pp].second_heading<<endl<<word[pp].word<<endl; getch(); cout<<word[pp].meaning<<endl<<endl<<endl; // -lwinmm if(!lock) { cout<<" if you want to delete, type d/D"; int tch = getch(); if(tch!='d' && tch!='D') { tword[word[pp].pre].next=tword[pp].next; tword[word[pp].next].pre=tword[pp].pre; } } else getch(); system("cls"); if(word[pp].pre==-1) { head=word[pp].next; word[head].pre=-1; } else { word[word[pp].pre].next=word[pp].next; word[word[pp].next].pre=word[pp].pre; } } cout<<"End of the list!"<<endl<<"Do you want to try again?(any input except C or E)or change the list?(C) or just exit?(E)"<<endl<<"write your choice(.../C/E):"; cin>>tstr; if(tstr=="E") Round=false; else if(tstr=="C") Change=true; else { Change=false; } system("cls"); } } ``` 之后: ``` #include"psw.cpp" #include<cstdio> #include <stdlib.h> #include <windows.h> #include <mmsystem.h> #pragma comment(lib,"winmm.dll.lib") #include<direct.h> #include<algorithm> #include<conio.h> //#include<bits/stdc++.h> //using namespace std; class wordcard{ public: string first_heading; string second_heading; string word; string meaning; string sound; int pre; int next; void give(string a,string b,string c,string d,int n,string e=""){ first_heading=a; second_heading=b; word=c; meaning=d; pre=n-1; next=n+1; } void Clear() { first_heading=""; second_heading=""; word=""; meaning=""; } }word[100000],tword[100000]; string get_path() { char buffer[10000]; getcwd(buffer,10000); string ans=buffer; return ans; } bool Change=true,Round=true; string listname[10000],tstr,first[2],second[2]; int p,tn,pp,head,nlist; bool lock=1; int main(){ } ``` —————————————— 现在我把原音频删掉,结果还在响! 但是我不用编辑器而是直接点开exe文件时就发现exe正常了。 —————————————— 我把代码删得只剩int main(),它还在响...
C++用哈弗曼编码实现压缩,编码文件比原文件大是怎么回事,怎么能实现压缩,代码如下,求修改
``` #include<iostream> #include<fstream> #include<string> using namespace std; struct HuffmanNode //树结点类定义 { int weight; //权值 int parent; //双亲 int lchild,rchild; //左右孩子 }; class HuffmanTree //哈夫曼树类定义 { private: struct HuffmanNode *Node; //哈夫曼树中结点的存储结构 char *Info; //用来保存各字符信息的字符数组 int LeafNum; //树中的叶子结点总数 public: HuffmanTree(); //构造函数 ~HuffmanTree(); //析构函数 void Initialization(int WeightNum); //初始化函数 void Encoder(); //编码函数,生成哈夫曼编码 void Decoder(); //译码函数,对二进制串进行译码 void Print(); //输出编码 void TreePrinting(); //输出哈夫曼树 }; HuffmanTree::HuffmanTree() //初始化空树 { Node=NULL; //将树结点初始化为空 Info=NULL; //将字符数组初始化为空 LeafNum=0; //将叶子数初始化为0 } HuffmanTree::~HuffmanTree() //析构函数 { delete[] Node; //释放结点空间 delete[] Info; //释放字符存储空间 } //初始化函数 void HuffmanTree::Initialization(int WeightNum) { int i,j,pos1,pos2,max1,max2; Node=new HuffmanNode[2*WeightNum-1]; //为哈夫曼树所需的结点申请空间 Info=new char[2*WeightNum-1]; for(i=0;i<WeightNum;i++) //先构造weightnum个点 { cout<<"请输入第"<<i+1<<"个字符值"; cin>>Info[i]; cout<<"请输入该字符的权值或频度"; cin>>Node[i].weight; //输入权值 Node[i].parent=-1; //为根结点 Node[i].lchild=-1; //无左孩子 Node[i].rchild=-1; //无右孩子 } //这里构造出weightnum个带权结点 for(i=WeightNum;i<2*WeightNum-1;i++) { pos1=-1; pos2=-1; //分别用来存放当前最小值和次小值的所在单元编号 max1=32767; //32767为整型数的最大值 max2=32767; for(j=0;j<i;j++) if(Node[j].parent==-1) if(Node[j].weight<max1) { max2=max1; //原最小值变为次小值 max1=Node[j].weight; //存放最小值 pos2=pos1; //修改次小值所在单元编号 pos1=j; //修改最小值所在单元编号 } else if(Node[j].weight<max2) { max2=Node[j].weight; //存放次小值 pos2=j; //修改次小值所在的单元编号 } Node[pos1].parent=i; //修改父亲位置 Node[pos2].parent=i; Node[i].lchild=pos1; //修改儿子位置 Node[i].rchild=pos2; Node[i].parent=-1; //表示新结点应该是根结点 Node[i].weight=Node[pos1].weight+Node[pos2].weight; } LeafNum=WeightNum; char ch; cout<<"是否要替换原来文件(y/n):"; cin>>ch; if(ch=='y'||ch=='Y') { ofstream fop; //以二进制方式打开hfmTree.dat文件,并当重新运行时覆盖原文件 fop.open("hfmTree.dat",ios::out|ios::binary|ios::trunc); if(fop.fail()) //文件打开失败 cout<<"文件打开失败!\n"; fop.write((char*)&WeightNum,sizeof(WeightNum)); //写入WeightNum for(i=0;i<WeightNum;i++) //把各字符信息写入文件 { fop.write((char*)&Info[i],sizeof(Info[i])); flush(cout); } for(i=0;i<2*WeightNum-1;i++) //把各节点内容写入文件 { fop.write((char*)&Node[i],sizeof(Node[i])); flush(cout); } fop.close(); //关闭文件 } cout<<"哈夫曼树已构造完成。\n"; } //编码函数 void HuffmanTree::Encoder() { if(Node==NULL) { ifstream fip; fip.open("hfmTree.dat",ios::binary|ios::in); //以二进制方式打开hfmTree.dat文件 if(fip.fail()) //文件打开失败 { cout<<"文件打开失败!\n"; return; //结束本函数 } fip.read((char*)&LeafNum,sizeof(LeafNum)); //读取叶子数 Info=new char[LeafNum]; Node=new HuffmanNode[2*LeafNum-1]; for(int i=0;i<LeafNum;i++) //读取字符信息 fip.read((char*)&Info[i],sizeof(Info[i])); for(int i=0;i<2*LeafNum-1;i++) //读取结点信息 fip.read((char*)&Node[i],sizeof(Node[i])); } char *Tree; //用于存储需编码内容 int i=0,num; char Choose; cout<<"从文件中读取内容的请选择1,需要重新输入的请选择2:"; cin>>Choose; if(Choose=='1') //读取文件ToBeTran.txt { ifstream fip1("ToBeTran.txt"); if(fip1.fail()) //文件不存在 { cout<<"文件打开失败!\n"; return; //结束本函数 } char ch; int k=0; while(fip1.get(ch)) { k++; } fip1.close(); Tree=new char[k+1]; ifstream fip2("ToBeTran.txt"); k=0; while(fip2.get(ch)) { Tree[k]=ch; //读取文件内容,并存到Tree中 k++; } fip2.close(); Tree[k]='\0'; //结束标志 cout<<"需编码内容为:"<<Tree<<endl; } //if(Choose=='2') else { string tree; cin.ignore(); cout<<"请输入需要编码的内容(可输入任意长,结束时请按2下回车):\n"; getline(cin,tree,'\n'); //输入任意长字符串, while(tree[i]!='\0') i++; num=i; //计算tree长度 i=0; Tree=new char[num+1]; while(tree[i]!='\0') //将tree中的字符转存到Tree中 { Tree[i]=tree[i]; i++; } Tree[i]='\0'; //结束标志符 } ofstream fop("CodeFile.dat",ios::trunc); i=0; int k=0; char *code; code=new char[LeafNum]; //为所产生编码分配容量为LeafNum的存储空间 while(Tree[k]!='\0') //对每一个字符编码 { int j,start=0; for(i=0;i<LeafNum;i++) if(Info[i]==Tree[k]) break; j=i; while(Node[j].parent!=-1) //结点j非树根 { j=Node[j].parent; //求结点j的双亲结点 if(Node[j].lchild==i) //是左子树,则生成代码0 code[start++]='0'; else code[start++]='1'; //是右子树,则生成代码1 i=j; } code[start]='\0'; //置串结束符 for(i=0;i<start/2;i++) //对二进制序列进行逆置 { j=code[i]; code[i]=code[start-i-1]; code[start-i-1]=j; } i=0; while(code[i]!='\0') //存储代码 { fop<<code[i]; i++; } k++; } fop.close(); cout<<"编码完成!且存到文件CodeFile.dat中!\n\n"; } //解码函数 void HuffmanTree::Decoder() { int i=0,k=0; int j=LeafNum*2-1-1; char* BitStr; ifstream fip1("CodeFile.dat"); //利用已建好的哈夫曼树将文件CodeFile中的代码进行译码 if(fip1.fail()) { cout<< "请先编码!\n"; return; } cout<<"经译码,原内容为:"; char ch; while(fip1.get(ch)) { k++; } fip1.close(); BitStr=new char[k+1]; ifstream fip2("CodeFile.dat"); k=0; while(fip2.get(ch)) { BitStr[k]=ch; //读取文件内容 k++; } fip2.close(); BitStr[k]='\0'; //结束标志符 if(Node==NULL) //还未建哈夫曼树 { cout<<"请先编码!\n"; return; } ofstream fop("TextFile.dat"); //将字符形式的编码文件写入文件CodePrin中 while(BitStr[i]!='\0') { if(BitStr[i]=='0') j=Node[j].lchild; //往左走 else j=Node[j].rchild; //往右走 if(Node[j].rchild==-1) //到达叶子结点 { cout<<Info[j]; //输出叶子结点对应的字符 j=LeafNum*2-1-1; fop<<Info[j]; //存入文件 } i++; } fop.close(); cout<<"\n译码成功且已存到文件TextFile.dat中!\n\n"; } //输出编码函数 void HuffmanTree::Print() { char ch; int i=1; ifstream fip("CodeFile.dat"); ofstream fop("CodePrin.dat"); if(fip.fail()) { cout<<"没有文件,请先编码!\n"; return; } while(fip.get(ch)) { cout<<ch; //读取文件内容 fop<<ch; //存到文件中 if(i==50) { cout<<endl; i=0; } i++; } cout<<endl; fip.close(); //关闭CodeFile.dat文件 fop.close(); //关闭CodePrin.dat文件 } //输出哈夫曼树 void HuffmanTree::TreePrinting() { if(Node==NULL) { cout<<"请先建立哈夫曼树!\n"; return; } ofstream fop("TreePrint.dat"); cout<<"结点位置(权值) "<<"编码 "<<"左孩子 "<<"编码"<<"右孩子('^'表示叶子)\n"; fop<<"结点位置(权值) "<<"编码 "<<"左孩子 "<<"编码"<<"右孩子('^'表示叶子)\n"; int i; for(i=(2*LeafNum-2);i>LeafNum-1;i--) { cout<<i<<"("<<Node[i].weight<<")"<<"--1--" <<Node[i].lchild<<"("<<Node[Node[i].lchild].weight<<")"<<"--0--" <<Node[i].rchild<<"("<<Node[Node[i].rchild].weight<<")"<<endl; fop<<i<<"("<<Node[i].weight<<")"<<"--1--" <<Node[i].lchild<<"("<<Node[Node[i].lchild].weight<<")"<<"--0--" <<Node[i].rchild<<"("<<Node[Node[i].rchild].weight<<")"<<endl; } for(;i>=0;i--) { cout<<i<<":"<<Node[i].weight<<"("<<Info[i]<<")---^\n"; fop<<i<<":"<<Node[i].weight<<"("<<Info[i]<<")---^\n"; } } int main() { cout<<"~~~~~~~~~~~~~welcome to Huffman encodrding&decoding system ~~~~~~~~~~~~~~~~~~~~\n\n"; cout<<"You can choose 1--6 options:\n"; cout<<"(1)初始化 \n"; cout<<"(2) 编码\n"; cout<<"(3) 译码\n"; cout<<"(4) 输出编码\n"; cout<<"(5) 输出哈弗曼树\n"; cout<<"(6) Byebye~!\n\n"; HuffmanTree HT; int weight; int choice; int OK=0; while ( !OK ) { cout<<"Please input your option (1--6):"; cin>> choice; switch( choice) { case 1: cout<<"Please input your code lenth"<<endl; cin>>weight; HT.Initialization(weight); break; case 2: HT.Encoder(); break; case 3: HT.Decoder(); break; case 4: HT.Print();break; case 5: HT.TreePrinting();break; case 6: cout<<"\n***********Thanks for Using!***********\n"; OK=1; break; return 0; } cout<<"(1)初始化\n"; cout<<"(2)编码\n"; cout<<"(3)译码\n"; cout<<"(4)打印哈弗曼编码\n"; cout<<"(5)打印哈弗曼树\n"; cout<<"(6) Byebye~!\n\n"; } return 0; } ```
为什么在void函数中用 if 分支时不能跳转到else
``` #include<cstdio> #include<iostream> using namespace std; void get(string t,int nextval[]) { int i=0; int j=-1; nextval[0]=-1; while(i<t.length()){ if(j==-1 || t[i]==t[j]){ i++; j++; if(t[i]!=t[j]) nextval[i]=j; else nextval[i]=nextval[j]; } else j=nextval[j]; } } void kmp(string s,string t){ int i=0; int j=0; int nextval[100]; get(t,nextval); for(int q=0;q<5;q++) cout<<nextval[q]<<endl; cout<<endl; while(i<s.length() && j<t.length()){ if(j==-1 || s[i]==t[j]) {i++; j++;} else j=nextval[j]; } cout<<j<<endl; cout<<t.length()<<endl; cout<<endl; if(j>t.length()) //为什么这里就<t.length()还是输出yes呢? cout<<"yes"; else cout<<"no"; } int main(){ string s; string t; cin>>s; cin>>t; kmp(s,t); } ``` ![图片说明](https://img-ask.csdn.net/upload/201903/23/1553330340_981872.jpg)
动态规划入门到熟悉,看不懂来打我啊
持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt;=2,n∈N*)根据定义,前十项为1, 1, 2, 3...
程序员,职场上请远离这种人!
对有些职场人来讲,甩锅就是一种生存手段。01.从大学打篮球说起上大学的时候喜欢打篮球,然后我又特别喜欢抢篮板,经常是跳起来的时候没事,落下来的时候偶尔会踩到别人的脚上,于...
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
一个读研让我损失了一百万的真实故事
关注我!只要10分钟,包你学会数据分析 毕业后,应该就业还是考研? 我刚出国留学那会儿,就惊讶的发现,外国local95%都不会选择读研 他们说,硕士学费很贵,时间宝贵,老板不认,所以很费 当几乎所有人都是本科学历时,硕士学历反而像个异类 在老板眼里,三年硕士远远不如3年的工作经验实用 他们甚至专门为拒绝高学历者发明了一个词,叫overoccupie...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给
shell脚本:备份数据库、代码上线
备份MySQL数据库 场景: 一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:dbname-2019-11-23.sql 4)需要对1天以前的所有sql文件压缩,格式为gzip 5)本地数据保留1周 6)需要把备份的数据同步到远程备份中心,假如...
聊聊C语言和指针的本质
坐着绿皮车上海到杭州,24块钱,很宽敞,在火车上非正式地聊几句。 很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。 那么,什么是指针,为什么大家都想避开指针。 很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。 指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起...
为什么你学不过动态规划?告别动态规划,谈谈我的经验
动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看 0-1 背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递归,谈谈我的经验 对于动态规划,春招秋招时好多题都会用到动态...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
如何安装 IntelliJ IDEA 最新版本——详细教程
IntelliJ IDEA 简称 IDEA,被业界公认为最好的 Java 集成开发工具,尤其在智能代码助手、代码自动提示、代码重构、代码版本管理(Git、SVN、Maven)、单元测试、代码分析等方面有着亮眼的发挥。IDEA 产于捷克,开发人员以严谨著称的东欧程序员为主。IDEA 分为社区版和付费版两个版本。 我呢,一直是 Eclipse 的忠实粉丝,差不多十年的老用户了。很早就接触到了 IDEA...
面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性...
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
为什么要推荐大家学习字节码?
配套视频: 为什么推荐大家学习Java字节码 https://www.bilibili.com/video/av77600176/ 一、背景 本文主要探讨:为什么要学习 JVM 字节码? 可能很多人会觉得没必要,因为平时开发用不到,而且不学这个也没耽误学习。 但是这里分享一点感悟,即人总是根据自己已经掌握的知识和技能来解决问题的。 这里有个悖论,有时候你觉得有些技术没用恰恰是...
【超详细分析】关于三次握手与四次挥手面试官想考我们什么?
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
新程序员七宗罪
当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 ...
2019年Spring Boot面试都问了什么?快看看这22道面试题!
Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、如何在 Spring Boot 中禁用 Actuator 端点安全性? 7、如何在自定义端口上运行 Sprin...
【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了
字节跳动这家公司,应该是所有秋招的公司中,对算法最重视的一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到的几个算法题,并且每个算法题我都详细着给出了最优解,下面再现当时的面试场景。看完一定让你有所收获 一、小牛试刀:有效括号 大部分情况下,面试官都会问一个不怎么难的问题,不过你千万别太开心,因为这道题往往可以拓展出更多有难度的问题,或者一道题看起来很简单,但是给出最优解,确实很...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
版权声明:本文为苦逼的码农原创。未经同意禁止任何形式转载,特别是那些复制粘贴到别的平台的,否则,必定追究。欢迎大家多多转发,谢谢。 小秋今天去面试了,面试官问了一个与敏感词过滤算法相关的问题,然而小秋对敏感词过滤算法一点也没听说过。于是,有了下下事情的发生… 面试官开怼 面试官:玩过王者荣耀吧?了解过敏感词过滤吗?,例如在游戏里,如果我们发送“你在干嘛?麻痹演员啊你?”,由于“麻痹”是一个敏感词,...
GitHub 标星 1.6w+,我发现了一个宝藏项目,作为编程新手有福了!
大家好,我是 Rocky0429,一个最近老在 GitHub 上闲逛的蒟蒻… 特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚。当时一方面是因为菜,看着这种全是英文的东西难受,不知道该怎么去玩,另一方面是一直在搞 ACM,没有做一些工程类的项目,所以想当然的以为和 GitHub 也没什么关系(当然这种想法是错误的)。 后来自己花了一个星期看完了 Pyt...
杭漂程序员2019的心路历程,还不起助学贷款,交不起房租,披荆斩棘终雨过天晴
一个杭漂2019的心酸历程,一路披荆斩棘终于还是雨过天晴。
我采访了同事,让他掏出了每天都会浏览的干货网站
前言只有光头才能变强。文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y在周六的晚上,我日常去到公司写文章。想写...
Java知识体系最强总结(2020版)
更新于2019-12-15 10:38:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同进步,结交更多志同道合的朋友。特此分享给大家,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。 文章目录...
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
相关热词 c#如何定义数组列表 c#倒序读取txt文件 java代码生成c# c# tcp发送数据 c#解决时间格式带星期 c#类似hashmap c#设置istbox的值 c#获取多线程返回值 c# 包含数字 枚举 c# timespan
立即提问