- 数组这块学得有点乱,条理性欠佳。这次正好总结一下。
- 上周的课堂内容没有更新, 因为小白自己也还没来得及吸收呢qwq。
- 也解释一下为什么文中有这么多例题。
- 因为我呢喜欢就着题去分析和学习,直接灌输知识不太能理解,有例子就能及时检验和应用了的。
先看看B3817
基础的双数组问题。分别定义两个数组,注意赋初值。
#include<bits/stdc++.h>
typedef long long LL;
using namespace std;
int a[3][5050];
int main()
{
int M,N,sum=0,kuang=0;
cin>>N>>M;
for(int i=1;i<=5000;i++) a[2][i]=-1;//把所有分数设成-1。
for(int i=1;i<=N;i++) cin>>a[1][i];//输入全部课程代码。
int x,y;
for(int i=1;i<=M;i++)
{
cin>>x>>y;
for(int j=1;j<=N;j++)
{
if(a[1][j]==x) a[2][j]=y;//第一个数是课程代码,第二个是分数。
}
}
for(int i=1;i<=N;i++)
{
if(a[2][i]<60) sum++;
if(a[2][i]==-1) kuang++;//因为初始值是-1,如果依旧是-1意味着旷考。
}
cout<<kuang<<endl<<sum;
return 0;
}
通过B2190回忆下字符串
#include<bits/stdc++.h>
typedef long long LL;
using namespace std;
int main()
{
string s;
getline(cin,s);
//cin输入时遇到空格就会停止,为了避免此问题引入getline函数。
//getline函数可以读取整行,包括前面和中间的空格,并将其存储在字符串对象中。
int num=0;
for(int i=0;i<=s.length()-1;i++)//size()和length():返回string对象的字符个数,他们执行效果相同
{
if(s[i]>='0'&&s[i]<='9') num++;//注意字符要用单引号圈出来。
//用“”时代表字符串,其中最后一项时\0;但是‘’代表单一字符。
}
cout<<num;
return 0;
}
用P5733练习一下
#include<bits/stdc++.h>
typedef long long LL;
using namespace std;
int main()
{
string s;
cin>>s;
for(int i=0;i<=s.length()-1;i++){
if(s[i]>='a'&&s[i]<='z') cout<<char(s[i]-32);
else cout<<s[i];
}
return 0;
}
- 这里s.length()-1是循环的-1。
string没有\0的概念,从头到尾循环要减1的原因,是因为下标是从0开始的,即:对于一个string字符串,它的第一个字符是s[0];如果它的长度是n,最后一个字符就是s[n-1]。
- c++string没有\0;\0是c语言中的字符数组字符串,比如char s[100],这是两个不同的东西。
B2135
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef struct Node node;
int main(int argc , char *argv[])
{
string s,a,b,t;
int k,p;
getline(cin,s);
getline(cin,a);
getline(cin,b);
//以下为处理\r的代码段,与程序算法无关
for(int i=s.length()-1;i>=0 && s[i]=='\r';i--)
{
s.erase(s.length()-1);
}
for(int i=a.length()-1;i>=0 && a[i]=='\r';i--)
{
a.erase(a.length()-1);
}
for(int i=b.length()-1;i>=0 && b[i]=='\r';i--)
{
b.eras