1.C++有哪些数据类型?为什么long和int都是4字节?

C++的数据类型有字符型(char)、布尔型(bool)、短整型(short)、整型(int)、长整型(long)、浮点型(float)、双精度型(double)等类型

首先并不是所有的long和int都是4字节的,在C++中规定int的长度是大于等于short的长度,小于等于long的长度,并且要大于2字节,在16位CPU以及单片机中,int是2字节的,而在32位CPU及以上的CPU中int是4字节的;

在C++中long的长度应该是大于等于int的长度,且最小为4字节,在32位CPU中long为4字节,在64位机上long为8字节长度

2.JAVA和C++的区别是什么?分别用在什么情景比较好?

Java 和 C++ 都是面向对象的语言,但他们也存在着一些区别

1、Java 不支持多继承

2、Java 没有指针和引用

3、c++ 需要程序员手动管理堆内存,Java有自动垃圾回收机制

Java运行在java虚拟机上,速度相对较慢,在实时性要求高的场合应该用c++

java通常在手机上应用的比较多。

JAVA和C++的区别是:

1 JAVA对内存的分配是动态的,它采用面向对象的机制,使用new为每个对象分配内存,程序运行过程中JAVA系统自动对内存进行扫描,对长期不用的空间作为“垃圾”进行收集,使得系统资源得以充分利用。 而C++使用new和delete来分配内存,内存的处理需要程序员自己来释放,如果对已释放的内存再释放或者对未内分配的内存做释放,都会造成死机,如果对长期不用或不再使用的内存长期不释放,造成资源的浪费。

2 JAVA不 在所有类之外定义全局变量,而是在某个类中定义一种公共静态的变量来完成全局变量的功能;

 3 JAVA不支持头文件,而C++使用头文件来定义类的原型、全局变量、库函数等;

4 JAVA不支持宏定义,使用关键字final来定义常量,在C++中则采用宏定义来实现常量定义

 5 JAVA对每种数据类型都分配固定长度,而C++中对于不同平台,同一种类型分配不同的字节数 

6 类型转换不同,JAVA在运行时系统对对象的处理要进行类型相容性检查,以防止不安全类型的转换,而C++中可以通过指针进行任意类型转换,常常带来不安全性。

 7 结构和联合的处理不同,C++中结构和联合的所有成员均为公有,这就带来了安全性问题,而在JAVA中根本不存在结构和联合,所有的内容都封装在类里面。

 8 JAVA不再使用指针,而C++中指针使用最灵活,蛋液最容易产生错误的数据类型,由指针多进行的内存地址操作常会造成不可预知的错误,同事通过指针对某个内存地址进行显示类型转换后,可以访问一个C++中的私有成员,从而破坏安全性,而JAVA对指针进行完全控制,程序员不能进行任何指针操作。

3.编程题:给定一个文件每一行是字符串,找出所有的逆序对,比如abc和cba是逆序的对。

#include"iostream" #include"string" #define MAX 100 using namespace std; bool check(string str1,string str2) {
    bool flag = true;     for(int i=0; i
>n;     for(int i=0; i
>str[i];         a[i] = str[i].length();         flag[i] = true;     }     int num = 0;     for(int i=0; i

4.给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。

void shudu()
{
    const int n=3;
    int a[n][n]={0};
    int i,j;
    i=0;
    j=n/2;
    a[i][j]=1;
    for(int c=2;c<=n*n;c++)
    {
        if (i-1>=0&&j+1<n)
        {
            if (a[i-1][j+1]==0)
            {
                i=i-1;
                j=j+1;
            }
            else
            {
                i=i+1;
            }
        }
        else
        {
            if (i-1<0&&j+1>=n)
            {
                i=i+1;
            }
            else
            {
                if (j+1>=n)
                {
                    i=i-1;
                    j=j+1-n;
                }
                else
                {
                    j=j+1;
                    i=i-1+n;
                }
            }
        }
        a[i][j]=c;
    }
 
    for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
        {
            std::cout<<a[i][j]<<" ";
        }
        std::cout<<std::endl;
    }
}

5.C和C++有什么区别,能用C实现C++所有功能吗?C能实现多态吗?

原本的作业是批处理,也就是过程编程。缺点是不利于代码修改和重用。为了解决这个问题,出现了C语言的函数,实现结构化编程。
随着项目愈发的庞大,函数与函数间的逻辑关系愈发复杂,不利修改。另外,算法中逻辑步骤是一样的,但针对不同的数据类型,需要重写一遍。为了解决这个问题,出现了C++语言的class,实现面向对象编程。以及C++语言的模板,实现范式编程。
所以C实现结构化编程,C++实现结构化编程、面向对象编程和范式编程。

C++实现面向对象编程和范式编程,背后需要编译器提供相应的机制支持。这个机制支持本质是逻辑的,理论上,C语言能够模拟这套机制,也就是说理论上用C实现C++所有功能。但工作量会特别大,即实用角度看,用C不能实现C++所有功能。

C能实现多态。C++实现多态,是建一个表格,存储多态相关的函数指针,运行时根据调用对象的类型选择相应的函数。C语言可以模拟这个原理实现多态。

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 

对语言本身而言,C是C++的子集, C实现了C++中过程化控制及其它相关功能,而在C++中的C,相对于原来的C还有所加强,引入了重载、内联函数、异常处理等等,C++更是拓展了面向对象设计的内容,如类、继承、虚函数、模板和包容器类等等。 

要用C模拟C++的多态性,可定义同一种函数指针类型和函数指针,运行过程中根据需要给函数指针赋函数地址。可以使用void *实现。

6.请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。

#include 
#include 
using namespace std;   class String{
public:     // 默认构造函数     String(const char* str = NULL);     // 复制构造函数     String(const String &str);     // 析构函数     ~String();     // 字符串连接     String operator+(const String & str);     // 字符串赋值     String & operator=(const String &str);     // 字符串赋值     String & operator=(const char* str);     // 判断是否字符串相等     bool operator==(const String &str);     // 获取字符串长度     int length();     // 求子字符串[start,start+n-1]     String substr(int start, int n);     // 重载输出     friend ostream & operator<<(ostream &o,const String &str); private:     char* data;     int size; }; // 构造函数 String::String(const char *str){
    if(str == NULL){
        data = new char[1];         data[0] = '\0';         size = 0;     }//if     else{
        size = strlen(str);         data = new char[size+1];         strcpy(data,str);     }//else } // 复制构造函数 String::String(const String &str){
    size = str.size;     data = new char[size+1];     strcpy(data,str.data); } // 析构函数 String::~String(){
    delete[] data; } // 字符串连接 String String::operator+(const String &str){
    String newStr;     //释放原有空间     delete[] newStr.data;     newStr.size = size + str.size;     newStr.data = new char[newStr.size+1];     strcpy(newStr.data,data);     strcpy(newStr.data+size,str.data);     return newStr; } // 字符串赋值 String & String::operator=(const String &str){
    if(data == str.data){
        return *this;     }//if     delete [] data;     size = str.size;     data = new char[size+1];     strcpy(data,str.data);     return *this; } // 字符串赋值 String& String::operator=(const char* str){
    if(data == str){
        return *this;     }//if     delete[] data;     size = strlen(str);     data = new char[size+1];     strcpy(data,str);     return *this; } // 判断是否字符串相等 bool String::operator==(const String &str){
    return strcmp(data,str.data) == 0; } // 获取字符串长度 int String::length(){
    return size; } // 求子字符串[start,start+n-1] String String::substr(int start, int n){
    String newStr;     // 释放原有内存     delete [] newStr.data;     // 重新申请内存     newStr.data = new char[n+1];     for(int i = 0;i < n;++i){
        newStr.data[i] = data[start+i];     }//for     newStr.data[n] = '\0';     newStr.size = n;     return newStr; } // 重载输出 ostream & operator<<(ostream &o, const String &str){
    o<