首页 > 代码库 > 编程笔试的一些坑(个人总结)

编程笔试的一些坑(个人总结)

笔试中经常会遇到操作字符串,输入输出格式等问题,为了以后不再犯迷糊,在这里总结一下,也希望小伙伴们能够跳过这些坑,专心把思路放到算法设计上来。

1,字符串操作:

题目1:输入一行字符串(中间可能会有空格),然后对该字符串做操作。

坑:在c++中,如果直接cin>>s,在遇到空格和回车时是不区分的,所以导致无法读取一整行字符串。

解决办法:1,使用cin.getline()  

    char * c;    cin.getline(c,100);    cout<<c;

输入长度必须小于100,得到的c可以直接转换成string类型,即可方便进行处理。 即:string s=c; 

2.使用gets() 

    char c[100];    gets(c);    string s=c;    cout<<s<<endl;

这里c[100]不能用char * c代替。

3,使用getline(cin,string s) 

string line;getline(cin,line);cout<<line<<endl;

该方法好处是不用限制长度,而且比较简洁。所以一般我都用这个。

Java里面输入相对来说就比较固定了,直接用Scanner类来实现.

class Test{    public static void main(String[] args){                Scanner sc=new Scanner(System.in);        String s=sc.nextLine();        System.out.println(s);        }}

 

2.Java和c++中的String(string)类的操作

字符串操作很重要,如果用char* char[] 来操作会大大影响效率,而且笔试时间很短,所以熟练掌握string类的基本操作很有必要

c++和java 的字符串类都提供了很多相似的功能:

获取i位置的字符

java: charAt(i)                           c++: 直接用下标 s[i]  或者 s.at(i)

连接

java: Stringbuilder  append()    (string类有+ 和concat()方法,但是无法直接改变字符串内容,而是以返回值的形式得到连接后的字符串)  c++ : string 类 append()   注意java里可以连接char ,c++里面不可以连接char。

获取字符串长度:

java和c++都是      s.length() 

这里补充一个易混淆的地方:size()方法是集合类里面求长度用的,length是java数组的长度,c++数组长度要用sizeof()/sizeof(),求char * c 的长度用strlen(c)。

子串:

java :   s.substr(m,n) 返回s从m到n的字符串    c++:  s.substr(m,n)返回从m开始的n个字符组成的子串。

替换:

java: s.replace(char old,char new)       c++:s.replace(int initpos, int len,"newstring")  

 

c++特有的方法 reverse(s.begin()+m,s.end()+n);   要引用头文件   #include <algorithm>

java特有的方法

indexOf(char c)      s.toCharArray()      s.split()  ...等等 

详细的自行查看api,常用的记住就好了。

 

3.有关结构体

结构体在做数据结构题目时会用到,然后自己曾经犯了阵模糊,这里用代码的形式总结一下:

#include<iostream>#include<string>using namespace std;struct Test1{    int a;}t;        //t在这里相当于:    struct Test1 t;即顺便生成了一个实例tstruct{    int a;} tt;typedef struct Test2{    int a;} test,*ptest;int main(){    struct Test1 t0;   //这个是c语言的声明方法,比较繁琐,struct不能省略    t0.a=3;    Test1 t1;    //声明一个Test1结构体的变量t1,可以直接使用。最常用的方式    t1.a=3;    Test1 *pt1=new Test1();  //这里结构体跟类很相似,用new生成一个实例对象    pt1->a=3;    Test1 *pt2=new Test1;    pt2->a=3;    t.a=3;              //如上所述,t已经是个实例了    test t2;               //typedef的用法,这里test就相当于 struct Test2,其实在c++里面不用这样也行,直接用    t2.a=3;    tt.a=3;                    //c++里面结构体可以不命名直接给出一个实例。    cout<<t0.a<<endl;    cout<<t1.a<<endl;    cout<<pt1->a<<endl;    cout<<pt2->a<<endl;    cout<<t.a<<endl;    cout<<t2.a<<endl;    cout<<tt.a<<endl;    //初始化    Test1 ttt{3};                   //c++可以省略=    cout<<ttt.a<<endl;    Test1 s={3};                    //c不可以省略=    cout<<s.a;}

 

 

编程笔试的一些坑(个人总结)