1、#define
宏定义,在编译前由预处理器对代码作字符串的替换。宏定义不是语句,后面不加“;”。
2、typedef
typedef是在编译时处理的,在自己的作用域内给一个已经存在的类型一个别名,typedef不可以在函数中定义
3、例: typedef int * int_ptr; 与 #define int_ptr int *
作用都是用int_ptr代表 int * ,但是二者不同,正如前面所说 ,#define在预处理 时进行简单的替换,而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型。
即相当于:
#define int_ptr int *int_ptr a, b; //相当于int *a, b; 只是简单的宏替换
typedef int* int_ptr;
int_ptr a, b; //a, b 都为指向int的指针, typedef为int* 引入了一个新的助记符
4、#include “ ”与< >之间的区别
“ ” :是从用户当前目录寻找包含文件,若找不到就会到库函数所在目录中寻找,再找不到就报错。
< >:是直接在库函数所在目录中寻找,找不到就报错。
5、#运算符
可以用来连接字符串。例:
#define PR(n) printf(#n"=%d\n", n)
int main()
{
int a=3, b=4, c=5;
PR(a);
PR(b);
PR(c);
return 0;
}
运算结果:
a=3
b=4
c=5
本文链接
一、功能:用于从输入输出流中读取数据
二、输入流迭代器:
1.定义方法
istream_iterator<要从流中读取的数据类型> 迭代器名(绑定的流);//创建的时候,就会调用标准输入
istream_iterator<要从流中读取的数据类型> 迭代器名; //没有绑定流,指向流的结束位置
2.支持操作
*:解引用,读取流中的数据,但数据还在缓冲区
++:自增会调用输入。前缀:流前移一位,返回移动后的迭代器。后缀:先存储自增前的数据,在流移动一位,返回移动前迭代器。
== or !=:相等的情况为:首先迭代器读取的必须是相同的数据类型,如果两个迭代器都是end则相等,?
it->mem:相当于*it.men;
三、输出流迭代器:
1.定义方法
ostream_iterator<要从流中读取的数据类型> 迭代器名(绑定的流,元素分隔符); //输出流迭代器必须绑定流!
2.支持操作
*:解引用,输出流中的数据 //一般输出流迭代器都带解引用,因为这样才能完成输出
++:前缀:流前移一位,返回移动后的迭代器。后缀:先存储自增前的数据,在流移动一位,返回移动前迭代器。
it->mem:相当于*it.men;
四、例子:
#include<iostream>
#include<iterator>
#include<string>
using namespace std;
int main()
{
istream_iterator<string> in_iter(cin),eof; //注意:stream_iterator<string> in_iter(cin)要求第一次输入
ostream_iterator<string> out_iter(cout,"\n"); // 绑定流对象cout,元素之间分隔符为换行
while(in_iter!=eof)
{
*out_iter=*in_iter; //输入流解引用,取得值后,给输出流,输出。
++out_iter
++in_iter;
}
}
本文链接
前面那篇关于字符统计的算法只能找出出现次数最多的一个字符,对于“aaabbb”这些有2个或以上的出现次数最多的情况无法全部找出来,于是做了一下改进,解决了这个问题。现在的算法并没有增加时间复杂度,但增加了空间复杂度。有什么问题欢迎交流。
2 #include <string.h>
3
4
5 //要统计的字符串
6 char *s = "abbbbccddddeeeegikgvvbdful697574999999eeeebrykjty478559454hhsdf";
7
8
9 int main(void)
10 {
11 int len,i,n=0;
12 int char_count;
13
14 //字符串中每个字符出现的次数,最多能表示128种字符(7位ASCII码)
15 char times[128]={0};
16 //存放出现次数最多的字符
17 char max_count_char[128];
18
19 char_count = 0;
20 //字符串长度
21 len = strlen(s);
22
23 //统计字符串各个字符出现的次数
24 for(i=0;i<len;i++)
25 times[s[i]]++;
26
27 //找出字符串中出现次数的最大值
28 for(i=0;i<128;i++)
29 {
30 if(times[i] > char_count)
31 char_count = times[i];//出现次数,始终保存当前出现次数的最大值
32 }
33
34 //找出有几个出现次数最大的字符
35 for(i=0;i<128;i++)
36 {
37 //与出现次数的最大值比较
38 if(times[i] == char_count)
39 {
40 //相等则保存该字符
41 max_count_char[n] = (char)i;
42 n++;
43 }
44 }
45
46 //打印所有出现次数最多的字符
47 for(i=0;i<n;i++)
48 printf("出现最多的字符是:%c ,出现的次数为:%d次\n",max_count_char[i],char_count);
49
50 return 0;
51 }
运行效果:
本文链接