一、第一次只出现一次的字符
char FirstNotRepeat(char *str)
{
assert(str!=NULL);
const int SIZE=256;
int hashTable[SIZE]={};
char *phash=str;
while(*phash!='\0')
{
hashTable[*(phash++)]++;
}
phash=str;//找到原来的位置
while(*phash!='\0')
{
if(hashTable[*phash]==1)
{
return *phash;
}
phash++;
}
return '\0';
}
二、左旋数组
void Fun(char*p,char *q)//逆置
{
char ch;
while(p<q)
{
ch=*p;
*p=*q;
*q=ch;
p++;
q--;
}
}
char *Left_Arry(char *str,int num)//左旋数组
{
assert(str!=NULL&&num>0);
int len=strlen(str);
char *pbeign=str;
char *pend=str-1;
if(len>0&&num<len)
{
char *firstbeign=str;
char *firstend=firstbeign+num-1;
char *secondbeign=firstend+1;
char *secondend=str+len-1;
Fun(firstbeign,firstend);
Fun(secondbeign,secondend);
Fun(firstbeign,secondend);
}
return str;
}
三、二维数组
1、声明二维数组的一般格式:
类型说明符 数组名[常量表达式1][常量表达式2];
其中,常量表达式1表示第一维的长度,常量表达式2表示第二维长度。第一维的长度表示数组行数,第二维的长度表示数组的列数。
2、引用二维数组
引用二维数组的一般格式:
数组名[下标][下标]
其中下标可以是常量、变量或整型表达式。
3.初始化二维数组的几种方式
1、在声明数组时为各个元素赋值-----分行赋值
int arr[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
2、在声明数组时为各个元素赋值————省略花括号
int arr[3][4]={1,2,3,5,6,7,8,9,10,11,12};这种赋值的方法与第一种的分行赋值效果相同,只是不如第一种方法直观。
3、在声明数组时为各个元素赋值————省略第一维的长度
int arr[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
注意:声明二维数组且同时初始化数组中的元素时,第一维的长度可以省略,系统根据初始化列表中元素的个数及第二维的长度计算出省略的第二维的长度,但不能省略第二维的长度。只是声明二维数组,并未对数组进行初始化时,每一维的长度都不能省略。
4、在声明数组时为各个元素赋值————部分赋值
只为二维数组中的部分元素赋值,此时,不能省略第一维的长度
int arr[3][4]={{2},{3},{5}};这只是为每一行的第一列赋值,系统会自动将其他元素赋值为0。
也可以为二维数组的其他列赋值:
int arr[3][4]={{0,1,2},{1,2},{1,1,1,13}}在为数组赋值时,是按照从左到右的顺序分别进行赋值的。注意,在为二维数组中的部分元素赋值时,不可以省略每一行外边的花括号。
四、将两行三列的数组转化为三行两列的数组
void Chage(int (*brr)[3],int (*crr)[2],int row,int col)
{
for(int i = 0;i < row;i++)
{
for(int j = 0;j < col;j++)
{
crr[j][i] = brr[i][j];
}
}
}
五、下三角矩阵
void Fun(int (*brr)[ROW])
{
int count = 1;
for(int i = 0;i < ROW;i++)
{
for(int j = 0;j < ROW;j++)
{
if(i >= j)
{
brr[i][j] = count++;
}
}
}
}
六、对称矩阵
void Fun2(int (*brr)[ROW])
{
srand(time(0));//随机种子,如果不加随机种子,每次运行出来的结果都是一样的。头文件是#include<time.h>
for(int i = 0;i < ROW;i++)
{
for(int j = 0;j < ROW;j++)
{
if(j > i)
{
brr[i][j] = rand()%10+1;//获取1-10之间的随机数//头文件是#include<stdlib.h>
}
else if(i == j)
{
brr[i][j] = 0;
}
else
{
brr[i][j] = brr[j][i] ;
}
}
}
}
七、打印二维数组
void Show(int (*brr)[3],int row,int col)
{
for(int i = 0;i < row;i++)
{
for(int j = 0;j < col;j++)
{
printf("%d ",brr[i][j]);
}
printf("\n");
}
}
八、打印二维数组
void Show1(int brr[2][3],int row,int col)
{
for(int i = 0;i < row;i++)
{
for(int j = 0;j < col;j++)
{
printf("%d ",brr[i][j]);
}
printf("\n");
}
}
九、打印二维数组
void Show2(int *brr,int row,int col)
{
for(int i = 0;i < row;i++)//1
{
for(int j = 0;j < col;j++)//3
{
printf("%2d ",brr[i*col+j]);//1*3+0
}
printf("\n");
}
}
十、如何通过指针访问二维数组里的元素