标题:C++狂人的大复习
关键词:函数,指针,模块化,自定义
内容
A. 一句话概括今日目标完成情况
(a)复习六七章的内容 100%
(b)温习前头的~
B.具体内容
第一个做了使用string操作字符串。附代码:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string text1("Heavy rains...beyond the limit");
string text2,text3;
int k;
text2="Sluice gates at Thres Gorges Dam opened to discharge water.";
text3=text1+text2;
k=text3.find("Heavy");
text3.erase(k,sizeof("Heavr")-1);
text3.insert(k,"Strong");
cout<<text3<<endl;
return 0;
}
接下来是取子字符串的,这个来来回回敲了好多遍,附代码:
#include<iostream>
using namespace std;
int main()
{
char str[100];
char sub[101];
int len;
int k,l;
int i,j=0;
cout<<"请输入原字符串(可以有空格的)"<<endl;
cin.getline(str,100);
len=0;
while(str[len]!='\0'){
len++;
}
cout<<"请输入子串的起始位置和长度:"<<endl;
cin>>k>>l;
while(k!=0&&l!=0){
j=0;
for(i=k-1;i<k+l-1&&i<len;i++){
sub[j]=str[i];
j++;
}
sub[j]='\0';
cout<<sub<<endl;
cout<<"请输入子串的起始位置和长度:"<<endl;
cin>>k>>l;
}
return 0;
}
不仅可以根据用户输入的位置和长度来取子字符,还可以循环使用。非常的厉害。
而下面这个词频统计是当时看了好久才看懂的。感觉这个在初期学习中算很长的代码了,附代码:
#include<iostream>
#include<cstring>
using namespace std;
struct WordList{
char word[20];
int freq;
};
int main()
{
WordList list[1000];
int N=0;
int i,j,k;
char tmp[20];
cout<<"请输入一系列英语单词,以xyz表示输入结束"<<endl;
cin>>tmp;
while(strcmp(tmp,"xyz")!=0){
for(i=0;i<N;i++){
if(strcmp(list[i].word,tmp)==0){
list[i].freq++;
break;
}
}
if(i>=N){
strcpy(list[i].word,tmp);
list[i].freq=1;
N++;
}
cin>>tmp;
}
for(i=0;i<N-1;i++){
k=i;
for(j=i+1;j<N;j++){
if(strcmp(list[j].word,list[k].word)<0){
k=j;
}
}
if(k!=i){
WordList tmp;
tmp=list[i];
list[i]=list[k];
list[k]=tmp;
}
}
cout<<"词频统计结果如下:"<<endl;
for(i=0;i<N;i++){
cout<<list[i].word<<'\t'<<list[i].freq<<endl;
}
return 0;
}
这个code的难点,我感觉很主要是struct定义结构体,和循环语句套嵌之间的相互关系要认真考量。这是今天截止到到目前为止唯一一个敲完直接F9,no error,no warning,直接运行的code了,我感到了由衷的欣慰,虽然走的很慢,但我尽量走稳。对于while和for语句的灵活搭配使用,我认为是我接下来的重点。
PS老师说使用复制和比较大小等函数属于危险操作,要在头文件之上加上 #define_CRT_SECURE_NO_WARNINGS这句话,然而我没加之前程序可以运行,加上之后直接就gg了。我也不是很懂这个老师了。上次第一次学习到这里的时候就是这样。
下面这个是用自定义的maxThree函数来求输入的几个数的最大值,附代码:
#include<iostream>
using namespace std;
double maxThree(double a,double b,double c)
{
double max;
max=a>b?a:b;
max=max>c?max:c;
return max;
}
int main()
{
double x1,x2,x3,max;
cout<<"请输入三个实数:"<<endl;
cin>>x1>>x2>>x3;
max=maxThree(x1,x2,x3);
cout<<"最大值是:"<<max<<endl;
return 0;
}
当初学习这个都时候感觉挺神奇,可惜我现在已经学了用指针变量来求最大值了。所以坦率地讲,我感觉这个自定义函数挺low的。还是指针那块牛X啊。
我感觉还是要去复习一下递归,内联,重载三个东西。上三个实例函数把:
1,递归函数。直接或间接使用自己的函数。这个函数就是在输入的数字不等于0的情况下,自己乘以自己减一……
#include<iostream>
using namespace std;
int f(int n)
{
if(n==0)
return 1;
else
return n*f(n-1);
}
int main()
{
int a;
cin>>a;
int jiecheng;
jiecheng=f(a);
cout<<jiecheng<<endl;
return 0;
}
2.内联函数 ,一般用来计算规模很小但是使用很频繁的问题。对,没毛病。附代码:
#include<iostream>
using namespace std;
inline int square(int x)
{
return x*x;
}
int main()
{
int i,sum=0;
for(i=1;i<=10;i++){
sum+=square(i);
}
cout<<"sum="<<sum<<endl;
}#include<iostream>
using namespace std;
inline int square(int x)
{
return x*x;
}
int main()
{
int i,sum=0;
for(i=1;i<=10;i++){
sum+=square(i);
}
cout<<"sum="<<sum<<endl;
}
3.函数重载 (这个太简单了,就不上代码了)
而第七章用用指针交换两个变量的值 ,顺带比较大小并且按照从小到大的顺序输出,带指针的code写起来也是很畅快啊~附代码:
#include<iostream>
using namespace std;
void swap(int *px,int *py)
{
int t=*px;
*px=*py;
*py=t;
}
int main()
{
int a,b,c;
cout<<"请输入三个整数:"<<endl;
cin>>a>>b>>c;
int *pa=&a;
int *pb=&b;
int *pc=&c;
if(*pa>*pb)
swap(pa,pb);
if(*pa>*pc)
swap(pa,pc);
if(*pb>*pc)
swap(pb,pc);
cout<<a<<" "<<b<<" "<<c<<endl;
return 0;
}
今天本来有三节课,由于莫名其妙的原因全都灰了。所以十点起床敲键盘,复习了一天,代码写了再删写了再删。就跟当时我拆Smartisan M1的包装盒一样。充满快感。
困意十足,今天不扯蛋了。
坦率地讲,明天下午第二节课有空。老夫夜观天象,是个学9.1,9.2的好日子。
我的博客:http://blog.csdn.net/andr3zzzz