T95:最长的单词------字符串

代码实现:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(){
string line;
while(getline(cin,line)){// 读取整行
istringstream iss(line);//将行字符串包装成输入流
string a,maxword;
int maxlen=0;
while(iss>>a){//自动提取下一个单词(跳过空格)
if(a.length()>maxlen){
maxlen=a.length();
maxword=a;
}
}
cout<<maxlen<<" "<<maxword<<endl;
}
return 0;
}

个人思考:
这道题主要是用到istringstream,它的作用是将一个字符串包装成一个输入流对象,我们通过getline(cin,line) 读取了一整行文本,这行文本包含多个单词,单词之间可能有多个空格。如果直接处理这个字符串,手动拆分单词会比较麻烦(需要自己遍历字符、判断空格边界)。而istringstream 可以帮我们省去这些麻烦------我们只需把这一行字符串交给它,然后像从键盘输入一样用 >> 连续读取,就能自动得到一个个被空格分隔的单词。设置两个变量来保存最长单词和其长度,每个单词进行比较,大于则更新。
T96:奖学金------字符串

代码实现:
#include <iostream>
#include <string>
using namespace std;
int main(){
int N;
bool first =true;
while(cin>>N){
if(!first){
cout<<endl;//每组结果之间空行
}
first =false;
string maxname;// 获得最多奖学金的学生姓名
int maxmoney=-1;// 当前最高奖学金金额
int total=0;// 所有学生奖学金总额
for(int i=0;i<N;i++){
string name;// 学生姓名
int avg,classscore,papers;// 期末平均成绩、班级评议成绩、论文数
char cadre,west;// 是否学生干部,是否西部省份学生
cin>>name>>avg>>classscore>>cadre>>west>>papers;
int money=0;
if(avg>80&&papers>=1) money+=8000;
if(avg>85&&classscore>80) money+=4000;
if(avg>90) money+=2000;
if(avg>85&&west=='Y') money+=1000;
if(classscore>80&&cadre=='Y') money+=850;
if(money>maxmoney){
maxmoney=money;
maxname=name;
}
// 累加所有学生的奖学金总额
total+=money;
}
// 输出结果
cout<<maxname<<endl;
cout<<maxmoney<<endl;
cout<<total<<endl;
}
return 0;
}
个人思考:
这道题相对容易,需要弄清每种奖学金对应的条件,要用双目运算符来表示,是否是学生干部和西部省份这两个变量是用char类型变量来表示,名字用string类型变量,其余用int即可。
T97:回文数2------字符串

代码实现:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
//判断字符串s是否为回文串
bool isreversed(const string&s){
int i=0,j=s.length()-1;
while(i<j){
if(s[i]!=s[j]) return false;
i++;
j--;
}
return true;
}
//将十进制整数n转换为二进制字符串(无前导零)
string tobinary(int n){
string bin;
while(n>0){
bin.push_back('0'+(n%2));//记录最低位
n/=2;
}
reverse(bin.begin(),bin.end());//反转得到正确顺序
return bin;
}
int main(){
int num;
while(cin>>num){
//to_string(num) 是 C++ 标准库函数,定义在 <string> 头文件中
//它接受一个整数(或其他数值类型)作为参数,返回该数值的十进制字符串表示
//十进制字符串及回文判断
string a=to_string(num);//转成十进制字符串
bool dec=isreversed(a);//十进制是否为回文
//二进制字符串及回文判断
string b=tobinary(num);//转成二进制字符串
bool bin=isreversed(b);
//输出结果
if(dec&&bin){
cout<<"Yes"<<endl;
}
else{
cout<<"No"<<endl;
}
}
return 0;
}

个人思考:
这道题有两个核心的地方,一个是判断字符串是否为回文串,可以通过双指针从两端向中间比较字符,相等则为回文;还有一个是将十进制整数转为二进制字符串,采用短除法,最后反转得到正确的二进制顺序。
(1)输入的数转为十进制字符串,可以直接用to_string;
//to_string(num) 是 C++ 标准库函数,定义在 <string> 头文件中
//它接受一个整数(或其他数值类型)作为参数,返回该数值的十进制字符串表示
(2)转为二进制则需要用上面的string tobinary函数;
然后两种进制下的字符串再通过回文函数来判断是否是回文。
英语翻译:
P69:1.软件开发
在计算机软件开发过程中,计算机科学家与工程师会研究软件设计的多个领域与技术,例如:在特定程序中使用何种类型的编程语言与算法效果最佳,如何高效地存储和检索信息,以及某些软件与计算机组合的计算极限。软件设计师在开发程序时必须考虑诸多因素。通常,为了提升软件的整体性能,需要牺牲某一方面的程序性能。例如,由于计算机的内存容量有限,软件设计师必须限制程序中包含的功能数量,以确保其所需内存不超过目标系统所能提供的容量。
retrieve:取回;找回;检索(数据);挽回
for the sake of:为了...... 起见;看在...... 的份上
P70:软件工程是软件开发的一个领域,在该领域中,计算机科学家和工程师研究各类方法与工具,以促进高效开发出正确、可靠且健壮的计算机程序。这一计算机科学分支的研究涵盖了软件生命周期的所有阶段:从正式的问题规格说明开始,逐步推进到解决方案的设计、作为程序的实现、程序测试,以及程序维护。软件工程师会开发软件工具,以及被称为编程环境的工具集,以改进开发流程。例如,这些工具可以帮助管理由程序员团队编写的大型程序中的众多组件。
robust:健壮的;稳健的;鲁棒的;稳定可靠的
phase:阶段;时期
specification:规格;规范;说明书;技术要求
implementation:实现;执行;实施
maintenance:维护;保养;运维
components:组件;部件;构件;组成部分
P71:计算机体系结构是对新型计算机系统的设计与分析。计算机体系结构专家通过提升计算机的速度、存储容量和可靠性,同时降低其成本与功耗,来探索改进计算机的方法。他们会开发软件与硬件模型,用以分析现有及拟议的计算机设计的性能,并借助这些分析结果指导新型计算机的研发。由于其模型的准确性取决于计算机电路的设计,他们常常会参与到新计算机的工程设计中。许多计算机体系结构专家致力于开发针对特定应用场景的专用计算机,例如图像处理、信号处理或机械系统控制等领域。针对特定任务队计算机体系结构进行优化,往往能带来更高的性能、更低的成本,或两者兼得。
proposed:被提出的;拟议的
circuitry:电路;电路系统;线路
optimization:优化
背单词:
