期末測試一:字符串處理
題目描述
在一個字符串str1中找到所有存在於str2中的字符,並逐一刪除。每刪除一個字符,就按順序從str3中取出一個字符填充刪除的位置。要求在刪除字符時,從str1的頭部開始比較與str2中的元素是否相同,而填充字符時,也從str3的頭部逐一選擇字符填充。當str3不夠長時,循環返回到頭部繼續逐一選擇。
輸入
輸入有三行,第一行對應str1,第二行對應str2,第三行對應str3。
輸出
輸出只有一行,是處理過的字符串,末尾沒有換行。
樣例輸入
abcdhjkl
hdk
AB
樣例輸出
abcABjAl
AC代碼示例1(自己的考試后修改結果)
#include<iostream>
using namespace std;
int len(char str[])
{
int l=0;
for (int i=0; str[i]; i++) l++;
return l;
}
int main()
{
char str1[40];
char str2[10];
char str3[10];
cin>>str1>>str2>>str3;
int m=0;
for (int i=0; str1[i]; i++)
{
for (int j=0; str2[j]; j++)
{
if (str1[i]==str2[j])
{
m=m%len(str3); //就是這里!!!考試寫成了str2死活AC不出來!!!結果是abcABj
cout<<"m-> "<<m<<" "<<len(str2)<<endl;
str1[i]=str3[m];
m++;
break;
}
}
}
for (int i=0; str1[i]; i++) cout<<str1[i];
return 0;
}
AC代碼示例2:某ZJUer同學現做(似乎沒有用到五分鍾)
#include <stdio.h>
#include <string.h>
#define MAX 200
int cur,len;
char s1[MAX], s2[MAX], s3[MAX], tmp;
int main(int argc, char const *argv[])
{
scanf("%s",s1);
scanf("%s",s2);
scanf("%s",s3);
len = strlen(s3);
for (int i = 0; s1[i]; i++)
{
tmp = s1[i];
for (int j = 0; s2[j]; j++)
{
if(tmp == s2[j]){
s1[i] = s3[cur++%len];
break;
}
}
}
printf("%s",s1);
return 0;
}
復盤
- 先把題目看清楚再下手。。前幾遍全是以str2開始遍歷的,完全搞錯了
- 不熟悉char[]的應用,沒認真看書以及做題做少了
- 應該多學習點string類或者STL的內容,字符串處理算法似乎很多廠子也會作為面試題。。
期末測試二:圖形類
題目描述
一個中空柱形圖形的截面如下圖陰影部分所示。設計一個圓類,包含半徑數據,以及構造函數,成員賦值函數,面積函數等。再設計一個柱形類,柱形類繼承了圓類,增加高度作為數據成員,增加構造函數,成員賦值函數,底面積函數(返回正方形與圓形面積之差),體積函數(為底面積乘以高度)等。在主函數中輸入圓的半徑及圓柱高度,調用柱形類對象的成員賦值函數,輸出柱形對象的底面積與體積。要求:用面向對象實現,使用繼承方法;數據為私有,函數為公有;圓周率值按3.14計算。
輸入
輸入兩個數據,分別代表圓的半徑和圓柱的高度,中間用一個空格隔開。
輸出
輸出兩個數據,分別是柱形對象的底面積與體積,中間用一個空格隔開,末尾沒有換行。
樣例輸入
4.3 5.6
樣例輸出
15.9014 89.0478
考試AC代碼
#include <iostream>
using namespace std;
class Circle
{
private:
double radius;
public:
Circle():radius(0){}
Circle(double r):radius(r){}
double ShowR() {return radius;}
double Area() {return 3.14*radius*radius;}
};
class Zhu: public Circle
{
private:
double height;
public:
Zhu():height(0){}
Zhu(double r, double h):Circle(r),height(h){}
double BottomArea()
{
double ra=0;
ra=ShowR();
return 4*ra*ra-Area();
}
double Volumn() {return BottomArea()*height;}
};
int main() {
double r,h;
cin>>r>>h;
Zhu z(r,h);
cout<<z.BottomArea()<<' '<<z.Volumn()<<endl;
return 0;
}