文章目录
- 7.1 introduction NULL
- 7.2 数组基本要素 NULL
- 7.3 问题:乐透数 NULL
- 7.4 问题:扑克牌
- 7.5 给函数传数组
- 7.6 防止数组参数变化
- 7.7 从函数返回数组
- 7.8 问题:数出每个字符出现的次数
- 7.9 寻找数组
- 7.10 冒泡排序
- 7.11 C-string
-
- itoa失效时的替代品: `sprintf`
7.1 introduction NULL
7.2 数组基本要素 NULL
7.3 问题:乐透数 NULL
7.4 问题:扑克牌
-
Creat a program that will randomly select four cards from a deck of 52 cards.problem:
- 效果:
-
solution:
#include <iostream>
#include <ctime>
#include <string>
#include <cstdlib>
using namespace std;
int main(){
const int numberOfCards = 52;
int deck[numberOfCards];
string suits[]={"Spades♠️","Heartst♥️","Diamondse♦️","Clubs♣️"};
string ranks[]={"Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"};
for(int i=0;i<numberOfCards;i++){
deck[i]=i;
}
srand(time(0));
for(int i=0;i<numberOfCards;i++){
int index = rand() % numberOfCards;
int temp = deck[i];
deck[i] = deck[index];
deck[index] = temp;
}
for(int i=0;i<4;i++){
string suit = suits[deck[i]/13];
string rank = ranks[deck[i]%13];
cout<<"Card number "<<deck[i]<<" : "<<rank<<" of "<<suit<<endl;
}
return 0;
}
7.5 给函数传数组
给函数传数组,不需要使用&关联,因为invoke的函数和原函数指的就是同一个array,但变量就不一样了,变量需要&。
7.6 防止数组参数变化
7.7 从函数返回数组
7.8 问题:数出每个字符出现的次数
7.9 寻找数组
7.10 冒泡排序
7.11 C-string
- 定义:以
结尾的字符数组。\0
- C-string的输入:
cin.getline(变量, size, '\n')
- 294页的Table 7.1 中给出了C-strings的函数
- 头文件
cstring
- 而
都定义在atoi, atof, itoa, atol
中cstdlib
- ⚠️特别提示:
字符数组(c-string)初始化时,数组大小一定要大于字符串长度+1,否则编译错误。
因为字符串数组最后有\0。
itoa失效时的替代品: sprintf
sprintf
- 头文件
stdio.h
- 使用:
- sprintf格式的规格如下所示。[]中的部分是可选的。
%[指定参数][标识符][宽度][.精度]指示符
- [指定参数] 处理字符方向。负号时表示从后向前处理。
- [标识符] 填空字元。 0 的话表示空格填 0;空格是内定值,表示空格就放着。
- [宽度]字符总宽度。为最小宽度。
- [精度] 精确度。指在小数点后的浮点数位数。
转换字符
%% 印出百分比符号,不转换。
%c 字符输出到缓冲区,不转换。
%d 整数转成十进位。
%f 倍精确度数字转成浮点数。
%o 整数转成八进位。
%s 字符串输出到缓冲区,不转换。
%x 整数转成小写十六进位。
%X 整数转成大写十六进位。
- 更多信息参考链接