标题:复杂信息的表达与处理
关键词:str数组的构造与使用
内容
A. 一句话概括今日目标完成情况
(a) 钻研4.7及其之后的第四章内容 100%
(b)熟练掌握str的构造与使用 90%
B.具体内容
1. 4.7实例,使用string类来表示字符串。使用str3=str1+str2可以将两个字符串拼接在一起。使用find函数查找指定字符串的位置,再使用erase函数来删除该字符串,最后用insert函数在该位置插入一个新的字符串。使用这个套路可以在一大堆文字里找到特定的那么一个或几个单词进行修改。暑假那个死胖子给我拷的文件名批量修改器应该使用的就是这个原理。
2. 4.8实例,矩阵乘法。开始这个const int想了一会,baidu之后发现int i的i可以被更改,是真正的变量;而const int i里面的i不可以被更改,是披着变量外衣的常量(我的天呢,听起来好惊悚)。看完教程之后才发现自己忘了两个矩阵的乘法怎么算,复习了之后才看懂老师PPT最后那些得数。
#include<iostream>
using namespace std;
int main()
{
const int M=20,N=20,K=20;
double A[M][N],B[N][K],C[M][K];
int M1,N1,N2,K1;
int i,j,k; //循环变量
cout<<"请输入第1个矩阵的维数M、N:"<<endl;
cin>>M1>>N1;
cout<<"请按行输入第1个矩阵的元素:"<<endl;
for(i=0;i<M1;i++){
for(j=0;j<N1;j++){
cin>>A[i][j];
}
}
cout<<"请输入第2个矩阵的维数N、K:"<<endl;
cin>>N2>>K1; //输入第2个矩阵维数
while(N2!=N1){
cout<<"第2个矩阵的行数应等于第1个矩阵的列数,请重输"<<endl;
cin>>N2>>K1; //这个想法很好啊!
}
cout<<"请按行输入第2个矩阵的元素"<<endl;
for(i=0;i<N1;i++){
for(j=0;j<K1;j++){
cin>>B[i][j];
}
}
for(i=0;i<M1;i++){
for(j=0;j<K1;j++){
C[i][j]=0;
for(k=0;k<N1;k++)
C[i][j]=C[i][j]+A[i][k]*B[k][j];
}
}
//输出乘积矩阵的元素
for(i=0;i<M1;i++){
for(j=0;j<K1;j++){
cout<<C[i][j]<<"\t";
}
cout<<endl;
}
return 0;
}
3. 4.9 取子字符串。这个比较简单,基本上看了老师PPT上的算法就能写出来了。
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;
这个将子字符串取出来的代码很有意思很有想法啊。用sub[j]来替换str[i]。
4. 4.10 词频统计。在源程序里使用了strcmp,strcat,strlen等的时候要在头文件里写#include<cstring>(第一眼望过去以为是CS)。
构造struct这个字典结构体的时候,要写在int main()的前头。(我也不知道为啥,就这样写吧)。使用下标的时候还不可以越界。还是和昨天一样,先把算法想清楚,按照逻辑顺序把算法翻译成源程序。最烦的是这个叫杨琦的让我在源程序最前面写#define_CRT_SECURE_NO_WARNINGS,说是防止错误提示什么的,我写完了编译的时候说我这里用错。删了这句之后倒没问题了。他这个口音,管J年 zhei 也是没谁了 ,听的我一身鸡皮疙瘩。
#include<iostream>
#include<cstring>
using namespace std;
struct WordList{
char word[20];
int freq;
};
int main()
{
WordList list[10000];
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=j+1;j<N;j++){
if(strcmp(list[k].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;
}
这个先构造词典结构体,再将输入的单词和词典compare,有则词频+1无则添加新词的方法真是厉害。
感觉主要就是strcmp函数的运用,添加单词就用strcpy函数。
我的天,今天太忙了。只有晚上回宿舍才有空啊时间太紧张了。课太满了,改天和老师申请一下把课都给我停了。上课哪有C++好玩。最尴尬的下午下课准备敲代码的时候居然被曹杰喊去搞那个私人影院。又浪费了1个小时。这个杨琦老师每次讲完课都要那么悲哀的来一句:今天的课就上到这里,同学们再贱。听我的尴尬症都犯了。每次敲完代码在最后吐槽一波,真爽。
C.明日计划(需要量化的目标)
1.复习4.7-4.10
2.学习5.1、5.2
(最后附上自己博客的链接)
我的博客:http://blog.csdn.net/andr3zzzz