ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

PTA算法题笔记,常使用的知识点

2022-04-21 16:00:56  阅读:205  来源: 互联网

标签:知识点 string int s1 PTA 算法 字符串 size cout


1.输入包含空格的字符:

  1. getline(cin,a);

    C++中定义为string a;时,(注意:当输入一个字符s时,又输入一串带有空格 的字符串,要写getchar(),第一个字符1被char ch读取,所以getchar()依次读取下一个未读取字符2,用户键入的回车也算一个字符,所以这里getchar()把回车读取了,输出时体现为换行)

    getchar();//接收上一个输入的跨行符,免得存入数组里

  2. cin.get(a,100) cin.getline(a,100)

    C++中定义为char a[100]时

  3. scanf("%\n",a);

    C语言中

  4.     string s;
       getline(cin,s);

     

  5. string s[100]
    for(int i=0;i<n;i++)
    •       getline(cin,s[i]);
  6. 当输入一个数字或字符之后,后面要使用getline(cin,a)函数时,要在此之前写getchar()把上一次输入的跨行符吃掉,否则跨行符会被读入到下一次输入,如:

        int n;    
    cin>>n;
       getchar();
       while(n--){
           string a;
           getline(cin,a);
      }

     

2.头文件<algorithm>的常用函数

  1. vector中的排序:sort(a,b)或者sort(a,b,cmp)

    • 参数解释:a是数组首地址,b是数组尾地址,cmp是自定义比较函数。sort()函数默认是升序排序,如果要进行降序,则可以使用自定义函数cmp。

    • cmp函数定义:bool cmp(int a,int b){ return a>b; }

    • 例子:sort(a,a+100,cmp) 降序

    • sort(nums.begin(),nums.end())

  2. max(a,b)

  3. //类似寻找最大最小值的题目,初始值一定要定义成理论上的最小最大值。如果定义成0,则复数无法比较。
           int max = INT_MIN;
    int min = INT_MAX;

3.unordered_map <int, int> m

  1. unordered_map为无序map,存储int-int键值对。

  2. 常用函数:

    • m.count(num) 计算键为num的个数。m[num]是求键为num的值。

    • m.erase(num) 从指定容器中删除指定元素。

    • m.find(num) 查找键为num的值。

    • m.end() 最后一个

4.vector用法

vector<int> nums

(1)常用函数

  1. nums.begin() nums.end() nums.size()

  2. vector<int> nums 的nums.size()返回的是无符号整数,遍历时要转化为整数。即int(nums.size())

  3. 取最后一位:int a = nums.back()

  4. 删除最后一位:nums.pop_back()

  5. 在尾部添加一位:nums.push_back()

  6. 反转数组:reverse(num.begin(),nums.end())

     

(2)初始化

  1. 一维数组:

     vector < int > v;  //v的size是0

    vector < int > v = {1,2,3,4,5};

    vector < int > v(n);

    vector < int > v(n,0); //size为n,初始值为0

     

  2. 二维数组:

    vector < vector < int > > v;   //v的size是0

    //n*m二维数组,初始值为0
    vector<vector<int>> v(n, vector<int>(m,0));
  3. sort(i,j) //排序 i到j

5.求字符串长度

  1. 数组:char a[100]

    • strlen(a)

    • 头文件:<cstring>

  2. 字符串:string a

    • a.lenth() (注:有时候需要转化为int才能比较)

    • a.size()

    • 头文件:<cstring>

6. string 常用函数

(1)常用函数

string a = "jfiejj33_fji";

  1. 求长度:a.length()

  2. 求最后一个字符:a.back() == 'i'

  3. 求字串:a.substr(0,4) == "jfie" //从0开始,取4位

  4. 求字符串的第一个字符:a.begin() == 'j'

  5. 求字符串的最后一个字符的下一位:a.end() == '\0'

  6. 求字符串的最后一个字符:a.rbegin() == 'i'

  7. 求字符串的第一个字符的前一位:a.rend() 逆向

  8. 判断是否等于:a == b

  9. 增加字符串:a = a + "ji2";

(2)求长度

image-20220306134352514

(3)比较大小

C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=)

 // (A的ASCII码是65,a的ASCII码是97)
   // 前面减去后面的ASCII码,>0返回1,<0返回-1,相同返回0
   string A("aBcd");
   string B("Abcd");
   string C("123456");
   string D("123dfg");

   // "aBcd" 和 "Abcd"比较------ a > A 返回1
   cout << "A.compare(B):" << A.compare(B)<< endl;                          // 结果:1

   // "cd" 和 "Abcd"比较------- c > A     返回1
   cout << "A.compare(2, 3, B):" <<A.compare(2, 3, B)<< endl;

(4)插入

  • 尾插:s.push_back('a')

  • 指定位置前插入:s.insert(i,'a')

    string s1;

   // ①尾插一个字符
   s1.push_back('a');
   s1.push_back('b');
   s1.push_back('c');
   cout<<"s1:"<<s1<<endl; // s1:abc

   // ②insert(pos,char):在制定的位置pos前插入字符char
   s1.insert(s1.begin(),'1');
   cout<<"s1:"<<s1<<endl; // s1:1abc

(5)拼接

  • append()

  • +

    string s1("abc");
   s1.append("def");  //abcdef

s1+='a';           //abcdefa

(6)遍历

void test6()
{
   string s1("abcdef"); // 调用一次构造函数

   // 方法一: 下标法

   for( int i = 0; i < s1.size() ; i++ )
  {
       cout<<s1[i];
  }
   cout<<endl;

   // 方法二:正向迭代器

   string::iterator iter = s1.begin();
   for( ; iter < s1.end() ; iter++)
  {
       cout<<*iter;
  }
   cout<<endl;

   // 方法三:反向迭代器
   string::reverse_iterator riter = s1.rbegin();
   for( ; riter < s1.rend() ; riter++)
  {
       cout<<*riter;
  }
   cout<<endl;
}

(7)string 删除

1. iterator erase(iterator p);//删除字符串中p所指的字符

2. iterator erase(iterator first, iterator last);//删除字符串中迭代器

区间[first,last)上所有字符

3. string& erase(size_t pos = 0, size_t len = npos);//删除字符串中从索引

位置pos开始的len个字符

4. void clear();//删除字符串中所有字符
void test6()
{
   string s1 = "123456789";


   // s1.erase(s1.begin()+1);             // 结果:13456789
   // s1.erase(s1.begin()+1,s1.end()-2);   // 结果:189
   s1.erase(1,6);                       // 结果:189
   string::iterator iter = s1.begin();
   while( iter != s1.end() )
  {
       cout<<*iter;
       *iter++;
  }
   cout<<endl;

}

(8)string 字符替换

  • string& replace(size_t pos, size_t n, const char *s);将当前字符串

    从pos索引开始的n个字符,替换成字符串s。

  • string& replace(size_t pos, size_t n, size_t n1, char c);将当前字符串从pos索引开始的n个字符,替换成n1个字符c。

void test7()
{
   string s1("hello,world!");

   cout<<s1.size()<<endl;                     // 结果:12
   s1.replace(s1.size()-1,1,1,'.');           // 结果:hello,world.

   // 这里的6表示下标 5表示长度
   s1.replace(6,5,"girl");                    // 结果:hello,girl.
   // s1.begin(),s1.begin()+5 是左闭右开区间
   s1.replace(s1.begin(),s1.begin()+5,"boy"); // 结果:boy,girl.
   cout<<s1<<endl;
}

(9)string 大小写转化

  • tolower()

  • toupper()

for( int i = 0; i < s.size(); i++ )
  {
       s[i] = tolower(s[i]);
  }

(10)string 查找

find()函数!!!

// 1. 查找一个字符串
   cout << s.find("chicken") << endl;

// 2. 从字符串的末尾开始查找字符
   cout << s.rfind('i') << endl;  

// 3. 从下标为6开始找字符'i',返回找到的第一个i的下标
   cout << s.find('i',6) << endl;

// 4. 在该字符串中查找第一个属于字符串s的字符
   cout << s.find_first_of("13br98") << endl;


//若找不到字符串,则返回一个特别的标志
s.find(flag,position))!=string::npos

(11) string的排序

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

void test9()
{
   string s = "cdefba";
   sort(s.begin(),s.end());  
   cout<<"s:"<<s<<endl;     // 结果:abcdef
}

(12)String 截取字符串

string s1("0123456789");
string s2 = s1.substr(2,5);
// 结果:23456-----参数5表示:截取的字符串的长度

 

例题1:(12条消息) L1-064 估值一亿的AI核心代码 (20 分)—团体程序设计天梯赛_王睿丶的博客-CSDN博客

例题2:(12条消息) PTA L1-059 敲笨钟 c++_Lijing_er的博客-CSDN博客

7. 英文字母转换

  1. 大写字母换小写:‘A’ + 32

  2. 小写字母换大写:'a' - 32

  3. 判断是否为字母:isalpha(a) 在头文件<ctype>

8.Π的取法


#include <math.h>
#define pi acos(-1.0)

9.排序

头文件:#include <algorithm>

  1. sort(a,a+n); //int a[101];

  2. sort(a.begin(),a.end()); //vector<int> a;

10. C语言中位数不够0补齐

%02d :位数不够0补齐

#include<stdio.h>
int main()
{
   int year,month,day;
 
   scanf("%d-%d-%d",&month,&day,&year);
   printf("%04d-%02d-%02d\n",year,month,day);
   return 0;
   
   
}

//可以将0替换为其他字符

11.C++中位数不够0补齐

cout<<setw(2)<<setfill('0')<<year<<setw(2)<<
setfill('0')<<month<<setw(2)<<setfill('0')<<day<<endl;

12. 判断str中是否含有str1

/*
 strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
 
*/
//注意要使用char*!!!!!!
s = strstr(s,str1);
if(s==NULL){  //注意c中是NULL

}else{

}

例子:

int main() 
{
   char* p1 = "abcdef";  //注意要使用char*!!!!!因为函数返回值是地址
   char* p2 = "def";
   // 在abcdef中找找def,找到的话返回它的地址,找不到返回空指针
   char* rest = strstr(p1, p2);
   if (rest == NULL)
  {
       printf("子串不存在\n");
  }
   else
  {
       printf("%s\n", rest);
  }

   return 0;
}

13.求最大公约数和最小公倍数

  1. 求最大公约数:欧几里得算法(gcd)

    int gcd(int a,int b){
       return b == 0 ? a : gcd(b,a%b);
    }

     

  2. 求最小公倍数:

    //求i和j的最小公倍数
    i*j/gcd(i,j);  
    //i和j的乘积/最大公约数
    //如4和6的最大公约数:2,则最小公倍数为:4*6/2=12

14.排序+去重函数

关键函数:sort()、unique()

#include <iostream>
#include <algorithm>   // sort(), unique()
#include <functional>  // less<int>()

using namespace std;

int main()
{
   int i;
   int a[10] = { 0, 7, 7, 6, 1, 1, 5, 5, 8, 9 };

sort( a, a + 10, less<int>() );  // 排序

   int n = unique(a, a + 10) - a;   // 去重

   for ( i = 0; i < n; i++)  // 注意i < n
       cout << a[i] << " ";  // 0 1 5 6 7 8 9
}

 

15.STL中set的用法

set会自动去重

  1. 遍历:

    //遍历set,使用迭代器类型
    for(set<int>::iter i=a.begin();i!=a.end();i++){
       cout<<*i<<endl;
    }

     

  2. 常用函数:

标签:知识点,string,int,s1,PTA,算法,字符串,size,cout
来源: https://www.cnblogs.com/lxpblogs/p/16174496.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有