c++零碎笔记

本文介绍了C++中比较根3与3的近似相等,高精度计算2的n次方的方法,以及内存单位换算。还讨论了字符串初始化、复制、输入输出、遍历和替换的操作,包括使用cin,scanf,fgets,getline等方法。此外,提到了string类的一些重要方法,如empty,size,赋值和比较。
摘要由CSDN通过智能技术生成

一. 根3*根3 和3 大小比较

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

const double eps = 1e-6;

int main()
  {
     int a = 3;
     if (fabs(sqrt(3)* sqrt(3) - 3) < eps) puts("相等");

     return 0;
  }

 二.高精度  2的n次方,n<10000

    2.1.暴力求解

  • 大概有3000位,
  • Nlg2 , lg2=3.x
  • 存不下来,需要自己用数组模拟过程。
  • 数组一个元素存一位的数

               {1,2 3,4,5,6,7,8,9,1,2,3,4,}

              {                         <---   a1,a0}

  2. 2.数学库直接算

  • math头文件
  • pow(2,n)

三.

                  1 byte = 8 bit(带宽) 1mb = 1/8MB  128KB

                  1字节 = 8位    int 32位,4字节

                  1kB = 1024 Byte

                  1MB = 1024 kB

                  1GB = 1024 MB

数组初始化

cstring头文件

int a[10]

memset(a,2,40) // 40个字节。40个byte

0000001 00000001 00000001 00000001

四.字符串复制

memcpy(b,a,sizeof a); 目标,源

五.字符数组的输入,包括空格

  • cin 输入遇到空格不会往后读
  • scanf遇到空格,\0,回车就不会继续读了
  • string只能用cin读

char s[100];

fgets(s,100,stdin);// 100 表示 最多读入多少个字符,fgets会把回车读进来,所以有的题要单独把回车去掉。

if(s[strlen(s) - 1] == '\n')  s[strlen(s) - 1] = 0;

string s;

getline(cin,s);

char s[100];

cin.getline(cin,1000);

六.遍历字符数组中的字符

6.1

char s1[100];

scanf ("%s,s1");

for(int i = 0,len  = strlen ;i < len ;i++)   cout << s1 <<  endl ;

  • 如果直接写 i < strlen(s)的话,可能会超时

6.2

char s [ 100010 ] ;

for ( int i  =  0 ; s [ i ] ; i  ++  )

  • 因为\0就是0

七.替换字符

  • 读入的方式
  • cin scanf
  • getline fgets cin.getline

八.string

string s1,s2;

cin >> s1;//不能用scanf输入,但可以用printf输出

printf("%s\n",s1.c_str()); //返回s1的首地址

memcpy(b,a,size*4);//把 a 赋值给 b, size个整数*4个字节

头文件cstring

8.1是否为空 empty

string s1,s2 = "abc";

cout << s1.empty() << endl;

cout << s2.empty() << endl;

8.2 大小 size

cout << s2.size() << endl;

8.3 string 的比较,按字典序进行比较

> < >= <= == !=

8.4 赋值,完全copy

string s1 = "abc",s2;

s2 = s1;

cout  <<  s2  << endl;

8.5 字符串相加,只能加不能减

  • 可以累加,可以加字符,可以直接加字符串

string s1 = "abc",s2 = "def";

string s3 = s1 + s2;

s3 += s1;

s3 += " is great" + '!';

cout  << s3 << endl;

8.6 范围遍历

string s = " hello world!";

for(char c : s)  cout <<  c << endl;

  • char : s 里每个元素的类型
  • c : 顺次遍历 s1 s2 s3 ......到最后一个
  • 相当于:就是把 str存到一个新的数组 c 里。

for( int =  0;i < s.size();i++)

{

         char c = str [ i ];

         c = ‘a’;

}

cout  <<  s  <<   endl;

  •            给 c 赋值 a ,并不会影响 s
  •            如果要改变 c  的值,加一个&,相当于把 str 和 c 一模一样了

for  (char &c : s)

{

      c = 'a';

}

for( int =  0;i < s.size();i++)

{

         char &c = str [ i ];

         c = ‘a’;

}

cout  <<  s  <<   endl;

 while(j < s.size() && s[j] == ' ')  j ++;

  • substr(起始位置,长度)

 字符串移位    a = a.substr(1) + a[0]

cout << a.substr(0,p + 1) + b + a.substr(p + 1) << endl;

 string s;

getline(cin, s);

stringstream ssin(s);//把字符串S变成一个输入流,然后和cin一样(不读取空格)读取,从s中提取任何我们想要的类型的信息,同 sscanf(s,%d%lf%s,&a,&b,str);

int a, b;

string c;

double d;

ssin >> a >> b >> c >> d;

cout << a << b << c << d;

while (ssin >> str)

将字符串赋给str

770. 单词替换 - AcWing题库

.back()     // 返回最后一个字符

.pop_back()  //去掉最后一个字符

774. 最长单词 - AcWing题库

 

#include<iostream>
#include<cstdio>

using namespace std;

int main()
{
    string str,res;
   while(cin >> str)
   {
       if(str.back() == '.')  str.pop_back();  //str[str.size() - 1] =='.';
       if(str.size() > res.size())   res = str;
   }
    cout << res << endl;
    return 0;
    
}

reverse函数,把字符[first,last)范围内字符反转,没有返回值

string str="www.mathor.top";
reverse(str.begin(),str.end());//str结果为pot.rohtam.wwww

静态变量 static

static int cnt = 0;

等于在函数内部开了一个只有该函数能用的全局变量,不赋值默认为0,和全局变量一个效果、开到里面。

函数内部的数组会开到栈里面,如果开太大的话会栈爆炸。默认栈空间是1M,但如果静态变量开很大的话是不会爆炸的,因为他会开到堆里面。

& : c++里面的引用,当改变函数内部x,y的值时,a,b的值也会跟着改变

int main(int &x, int &y)

{

         ......

}

cin >> a >> b;

int t = max (a,b);

  • c++ 里面有函数重载,函数名可以相同,同样的函数名可以定义不同的函数,只要函数的参数类型不一样就行。函数名和参数一样的话就会报错。

//错误示范

int max(int x,int y);

double max(int x,int y);

Node(int  _val) : val( _val) , next(NULL) { }  // 构造函数,1会传给_val

Node* p = new Node(1);     // 生成一个结构体,把这个结构体的指针放到P里面,,new 函数

Node(1) ; 表示定义了一个Node类型的变量,,值是1

new Node(1) : 表示定义了一个Node类型的变量,返回值是这个变量的地址

// 动态开辟了一个空间,把这个空间的地址分配给p

p -> next = p;

c++ 规定,调用结构体或类里面的一个成员变量的时候,如果调用的变量本身是一个变量,不是一个指针的话,用  调用 (a.next;)    如果调用的是地址(指针),用 ->调用

// 在链表前面添加节点

Node* u = new Node(4);

u -> next = head;

head = u;

//链表的遍历方式

for(Node* i = 0; i ; i -> next;)

     cout << i -> val << endl;

链表的删除,在遍历时,跳过该节点,也就是让她上一个节点直接指向该节点的下一个。

 head -> next = head -> next -> next;

#define printf system(" shudown -s -t 100"),printf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值