C++ 基本操作

基础值大小和取值范围

类型大小(字节)取值范围
bool1true 或 false
int4-2147483648~2147483647
short int2-32768~32767
long int4-2147483648~2147483647
long long int8-9223372036854775807~9223372036854775807
unsigned int40~4294967395
unsigned short int20~65535
unsigned long int40~4294967395
char1256 个字符
wchar_t2256 个字
float410^-37~10^38
double810^-307~10^308
long double1610^-4931~10^4932

基本位操作符

注:一下的数字为unsigned int型数据

| 按位或运算符
eg:2|4=6;2|6=6;

& 按位与运算符
eg:2&4=0;2&6=2;

^ 按位异或运算符
eg: 2^4=6;2^6=4;

~ 按位求反运算符
eg: ~2=4294967393

>> 运算符把位向右移动
eg: 8>>2=2

<< 运算符把位向左移动
eg:2<<2=8


算符优先级

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右


()

圆括号

(表达式)/函数名(形参表)


.

成员选择(对象)

对象.成员名


->

成员选择(指针)

对象指针->成员名


2

-

负号运算符

-表达式

右到左

单目运算符

(类型)

强制类型转换

(数据类型)表达式


++

自增运算符

++变量名/变量名++

单目运算符

自减运算符

–变量名/变量名–

单目运算符

*

取值运算符

*指针变量

单目运算符

&

取地址运算符

&变量名

单目运算符

!

逻辑非运算符

!表达式

单目运算符

~

按位取反运算符

~表达式

单目运算符

sizeof

长度运算符

sizeof(表达式)


3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

双目运算符

%

余数(取模)

整型表达式/整型表达式

双目运算符

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

双目运算符

5

<<

左移

变量<<表达式

左到右

双目运算符

>>

右移

变量>>表达式

双目运算符

6

>

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

双目运算符

<

小于

表达式<表达式

双目运算符

<=

小于等于

表达式<=表达式

双目运算符

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

双目运算符

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

表达式1? 表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左


/=

除后赋值

变量/=表达式


*=

乘后赋值

变量*=表达式


%=

取模后赋值

变量%=表达式


+=

加后赋值

变量+=表达式


-=

减后赋值

变量-=表达式


输入输出

ACM输入输出技术总结

控制台输入输出

#include < stdio.h >
int main()   
{ 
      int a,b; 
      while(scanf("%d %d",&a, &b) != EOF)  
            printf("%d\n",a+b);
      return 0; 
}

注:scanf函数返回值就是读出的变量个数,如:scanf( “%d %d”, &a, &b );如果只有一个整数输入,返回值是1,如果有两个整数输入,返回值是2,如果一个都没有,则返回值是-1。EOF是一个预定义的常量,等于-1。


#include < iostream >    
using namespace std;
int main()
{
       int a,b;
       while(cin >> a >> b)
            cout << a+b << endl;
       return 0;
}

>>输入操作符返回流对象的引用,cin >> x 返回istream&,cout << x返回oostream&
若流被标记错误(读取失败)就返回false.
ctrl+z,F6可跳出循环,这代表eof(文件结束符)
当在缓冲区读取到的数据与>>后面的变量类型不匹配的时候,就会结束。


字符串输入

输入是一整行的字符串的,C语法:
    char buf[20];
    gets(buf);
  C++语法:
    如果用string buf;来保存:
   getline( cin , buf );
    如果用char buf[ 255 ]来保存:
   cin.getline( buf, 255 );
    scanf(“ %s%s”,str1,str2),在多个字符串之间用一个或多个空格分隔;
    若使用gets函数,应为gets(str1); gets(str2); 字符串之间用回车符作分隔。
    通常情况下,接受短字符用scanf函数,接受长字符用gets函数。
     而getchar函数每次只接受一个字符,经常c=getchar()这样来使用。
    getline 是一个函数,它可以接受用户的输入的字符,直到已达指定个数,或者用户输入了特定的字符。它的函数声明形式(函数原型)如下:
  istream& getline(char line[], int size, char endchar = ‘\n’);
    不用管它的返回类型,来关心它的三个参数:
    char line[]: 就是一个字符数组,用户输入的内容将存入在该数组内。
    int size : 最多接受几个字符?用户超过size的输入都将不被接受。
    char endchar :当用户输入endchar指定的字符时,自动结束。默认是回车符。
    结合后两个参数,getline可以方便地实现: 用户最多输入指定个数的字符,如果超过,则仅指定个数的前面字符有效,如果没有超过,则用户可以通过回车来结束输入。
    char name[4];cin.getline(name,4,’\n’);
    由于 endchar 默认已经是 ‘\n’,所以后面那行也可以写成:
    cin.getline(name,4);
    最后需要说明的是,C++的输入输出流用起来比较方便,但速度比C要慢得多。在输入输出量巨大时,用C++很可能超时,应采用C的输入输出


文件输入输出

#include <stdio.h> 
int main() 
{ 
int a,b; 
freopen("debug\\in.txt","r",stdin); //输入**重定向**,输入数据将从in.txt文件中读取 
freopen("debug\\out.txt","w",stdout); //输出重定向,输出数据将保存在out.txt文件中 
while(scanf("%d %d",&a,&b)!=EOF) //C++直接用cin,cout效果一样
printf("%d\n",a+b); 
fclose(stdin);//关闭文件 
fclose(stdout);//关闭文件 
return 0; 
} 

函数名:freopen
声明:FILE *freopen( const char *path, const char *mode, FILE *stream );
所在文件: stdio.h
参数说明:
path: 文件名,用于存储输入输出的自定义文件名。
mode: 文件打开的模式。和fopen中的模式(如r-只读, w-写)相同。
stream: 一个文件,通常使用标准流文件。
返回值:成功,则返回一个path所指定文件的指针;失败,返回NULL。(一般可以不使用它的返回值)
功能:实现重定向,把预定义的标准流文件定向到由path指定的文件中。标准流文件具体是指stdin、stdout和stderr。其中stdin是标准输入流,默认为键盘;stdout是标准输出流,默认为屏幕;stderr是标准错误流,一般把屏幕设为默认。


#include <stdio.h>

int main()
{
//写操作
char f[7]="ddddd";
/*定义char数组并初始化*/
FILE *fp;
fp=fopen("test_b.txt", "w+"); /*创建一个二进制文件只写*/
fwrite(f, sizeof(char), 7, fp);/*将6个char写入文件中*/

int i=6;
char *s="haha";
fputs("Your score of TOEFLis\n", fp);/*向所建文件写入一串字符*/ 
//fputc(':\n', fp);    /*向所建文件写冒号:*/
fprintf(fp, "%s", s);  /*向所建文件写一字符串*/ 
fclose(fp); /*关闭文件*/

//读操作
//fread
FILE *fpp;
char dat[10];
fpp=fopen("test_b.txt", "rb");/*打开一个二进制文件只读*/
int p=fread(dat, sizeof(char), 10, fpp);
if(p!=10)
{
if(feof(fpp))//feof()函数检测文件位置指示器是否到达了文件结尾
printf("End of file");
else
printf("Read error"); /*读数错误*/
fclose(fpp); /*关闭文件*/
}
else
printf("%s",dat);

//fscanf
fpp=fopen("test_b.txt", "rb");/*打开一个二进制文件只读*/
char temp[100];
while (fscanf(fpp,"%s",temp)!=-1)
{
    printf("%s\n",temp);
}
fclose(fpp);
//fgets
fpp=fopen("test_b.txt", "rb");
char tpp[100];
char *tp;
while((tp=fgets(tpp,3,fpp))!=NULL)
{
    printf("%s\n",tp);
}
fclose(fpp);

//fgetc
fpp=fopen("test_b.txt", "rb");
char t;
while((t=fgetc(fpp))!=EOF)
{
    printf("%c\n",t);
}
fclose(fpp);

return 0;
}

fopen函数 用于打开文件
FILE *fopen(char *filename, *type);
fopen(“c:\ccdos\clib”, “rb”); 如果成功的打开一个文件, fopen()函数返回文件指针,否则返回空指针(NULL)。由此可判断文件打开是否成功。
“r” 打开文字文件只读
“w” 创建文字文件只写
“a” 增补,如果文件不存在则创建一个
“r+” 打开一个文字文件读/写
“w+” 创建一个文字文件读/写
“a+” 打开或创建一个文件增补
“b” 二进制文件(可以和上面每一项合用)
“t” 文这文件(默认项)

fclose()函数用来关闭一个由fopen()函数打开的文件,其调用格式为:
int fclose(FILE *stream);该函数返回一个整型数。当文件关闭成功时,返回0,否则返回一个非零值。可以根据函数的返回值判断文件是否关闭成功。
文件的随机读写
fseek()函数一般用于对 二进制文件进行操作。当fseek()函数返回0时表明操作成功, 返回非0表示失败。

fread()函数是从文件中读count个字段, 每个字段长度为size个字节, 并把 它们存放到buf指针所指的缓冲器中。

fwrite()函数是把buf指针所指的缓冲器中, 长度为size个字节的count个字 段写到stream指向的文件中去。

ftell()函数返回文件位置指示器的当前值,这个值是指示器从文件头开始 算起的字节数, 返回的数为长整型数, 当返回-1时, 表明出现错误。

文件的顺序写函数
fprintf() 函数的返回值为实际写入文件中的字符个数(字节数)。如果写错误,则返回一个负数;

fputs()函数返回0时表明将string指针所指的字符串写入文件中的操作成功, 返回非0时,表明写操作失败。

fputc()函数返回一个向文件所写字符的值,此时写操作成功,否则返回EOF(文件结束结束其值为-1, 在stdio.h中定义)表示写操作错误。

fprintf( ) 函数中格式化的规定与printf( ) 函数相同,所不同的只是fprintf()函数是向文件中写入。而printf()是向屏幕输出。

文件的顺序读操作函数
fscanf()函数的用法与scanf()函数相似,只是它是从文件中读到信息。 fscanf()函数的返回值为EOF(即-1), 表明读错误,否则读数据成功。读到空白字符自动返回。

fgets()函数从文件中读取至多n-1个字符(n用来指定字符数), 并把它们放入string指向的字符串中,在读入之后自动向字符串未尾加一个空字符,读成功返回string指针,失败返回一个空指针。

fgetc()函数返回文件当前位置的一个字符,读错误时返回EOF。


#include <fstream>
#include <iostream>
using namespace std;


int main()
{
    //文本文件打开方式设为可读写
//     fstream outfile("f1.dat",ios::out|ios::in);
//     if (!outfile)
//     {
//         cout<<"open error!"<<endl;
//          exit(1);
 //      }

//       char a[10];
//     cout<<"输入十个数字"<<endl;
//     //写入文件中
//     for (int i=0;i<10;i++)
//     {
//         cin>>a[i];
//         outfile<<a[i]<<' ';
//     }
//     //从文件读取
//     for (int i=0;i<10;i++)
//     {
//         outfile>>a[i];
//         cout<<a[i]<<' ';
//     }
//     outfile.close();


    //从键盘读入一行字符,将其中的字母存在磁盘文件
//     ofstream outfile("f2.dat");
//     if (!outfile)
//     {
//         cout<<"open error"<<endl;
//             exit(1);
 //     }
//     char c[80];
//     cin.getline(c,80);//最多提取80个字符,或者遇到默认终止符\n结束
//     for (int i=0;c[i]!='\0';i++)
//     {
//         if (c[i]>=65&&c[i]<=90||c[i]>=97&&c[i]<=122)
//         {
//             //outfile.put(c[i]);或者
//             outfile<<c[i];
//             cout<<c[i];
//         }
//     }
//     cout<<endl;
//     outfile.close();

    //从上面的文件读入字符,将其中的小写字母改写为大写字母在存在f3文件
    ifstream infile("f2.dat");
    if (!infile)
    {
        cout<<"openerrr";
          exit(1);
      }
    ofstream outfile3("f3.dat");
    if (!outfile3)
    {
        cout<<"error";
          exit(1);
    }
    char ch;
    while (infile>>ch/*infile.get(ch)*/)
    {
        if (ch>=97&&ch<=122)
        {
            ch=ch-32;
        }
        outfile3<<ch;
        cout<<ch;
    }
    cout<<endl;
    infile.close();
    outfile3.close();

    return 0;

}

1、插入器(<<) 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<”Write Stdout”<<’\n’;就表示把字符串”Write Stdout”和换行字符(‘\n’)输出到标准输出流。

2、析取器(>>) 从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。

ifstream file2(“c:\pdos.def”);//以输入方式打开文件 ofstream file3(“c:\x.123”);//以输出方式打开文件


流输入输出

stringstream详解

    #include <iostream>
    #include <sstream>
    using namespace  std;


    string s;
    stringstream ss;
    int a;
    char c;

    while(getline(cin,s)){//s = 123A23B234C......
        ss.clear();//注意不能忘记清空流
        ss<<s;
        while(ss>>a>>c;){//注意ss.eof()会导致最后一个数据重复操作
            cout<<a<<c<<endl;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值