zoukankan      html  css  js  c++  java
  • 编程笔试的一些坑(个人总结)

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

    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;
    
    
    }

     

  • 相关阅读:
    60阶单群同构于A5的证明
    Riemann映射定理
    一个特殊情形的Mittag-Leffler分解
    一个重要的函数
    指数有限的子群存在一个右陪集代表元系,同时也是左陪集代表元系
    素数的平方阶群必为Abel群
    $mathscr{F}$类
    一个多项式问题
    Mittag-Leffler定理,Weierstrass因子分解定理和插值定理
    C -Concatenating Teams (字符串hash)
  • 原文地址:https://www.cnblogs.com/jymblog/p/5903862.html
Copyright © 2011-2022 走看看