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

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

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;即顺便生成了一个实例t

struct
{
    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;


}

 

 

posted @ 2016-09-24 19:02  Jymoon  阅读(982)  评论(0编辑  收藏  举报