文章目录
-
- 前引
- 思路解析
- 代码实现
- 效果图
本篇博客仅作学习参考 禁止直接复制粘贴代码以及任何形式的抄袭行为
前引
因为博主 C语言已经差不多都快3个月左右没用过了
平时刷力扣和做其他的东西都是用的cpp
今天布置了两个C语言 叫做大作业其实都很简单
这个我就只花了20-30分钟左右就做出来了 很简单
但还是打算把代码贴出来吧 做都做了hhh
思路解析
首先是如何保存卡组呢
如果是C++的话 我会用 vector<vector<string>>
很方便很方便的就弄了
但是我刚刚去百度了一下 好像C++库函数里面也没有Shuffle函数
不像Python里面是有的 那好吧
C语言的话 就用三维的字符数组就行了 然后最后一层的数组储存牌
char card[4][13][4]
最后一层4的话 是因为有一个花色 + 最大两个数组 + '\0’空间
之后就往里面填卡组就完了 挺简单的
我用了一个 temp数组重当暂时的字符串 还用了一个sprintf函数
直接向字符数组赋值
之后就用strcpy或者memcpy 就向最底层的字符数组copy就完成了
之后就到了洗牌环节了
我也没想很多 一想就是 随机的交换 三维数组中的
管理字符数组那一层的字符串即可
然后每一次交换用四次random函数
之后就交换即可 我对指针的操作烦了
就直接memcpy对底层字符串进行交换了
思路就是这么个思路 然后具体实现就看下面代码实现就行了
代码实现
#include <stdio.h>
#include <stdlib.h>
#include <time.h>void shufflecard(char card[4][13][4]);void shufflecard(char card[4][13][4])
{
int i,j,times = 100;char temp[4];srand(time(NULL));while(times--){
int row1 = rand()%4,row2 = rand()%4;int line1 = rand()%13,line2 = rand()%13;memcpy(temp,card[row1][line1],sizeof(temp));memcpy(card[row1][line1],card[row2][line2],sizeof(temp));memcpy(card[row2][line2],temp,sizeof(temp));}for(i=0;i<4;++i){
for(j=0;j<13;++j)printf("%4s",card[i][j]);printf("\n");}return;
}int main()
{
int i,j;char ch;char card[4][13][4];//52组牌的三维数组 c语言字符串只能是const char*char temp[4];//为后面的memcpy做准备char alpha[4] = {
"JQKA"};memset(temp,'\0',sizeof(temp));//格式化temp字符串//为52组牌进行赋值 并进行输出for(i=0;i<4;++i){
temp[0] = i+3;for(j=0;j<13;++j){
if(j<9) sprintf(temp+1,"%d",j+2);else sprintf(temp+1,"%c",alpha[j-9]);memcpy(card[i][j],temp,sizeof(temp));//赋值printf("%4s",card[i][j]);//输出}printf("\n");//换行}printf("\nShuffle input 'Y' quit input 'N'\n");while((ch = getchar()) == 'Y' || ch == 'y'){
shufflecard(card);fflush(stdin);printf("\nGoing On input 'Y' quit input 'N'\n");}printf("\nThanks for using this small Shuffle_Card program \nSee u!\n");return 0;
}