#include<stdio.h>
#define ANum1 285
#define ANum2 3500
// printf(" %d %c \n", (int)'a', (char)123);//字符查看ASCⅡ表
// printf(" %d %d \n", (int)"我"[0], (int)"我"[1]);//汉字查看ASCⅡ表
//《构造函数部分》
// Small_Num 求较小函数 求两个整型数据中较小的一个,返回值为较小的数
int Small_Num(int Num1, int Num2)
{
if(Num1 > Num2)
return Num2;
else
return Num1;
}
// Bige_Num 求较大函数 求两个整型数据中较大的一个,返回值为较大的数
int Bige_Num(int Num1, int Num2)
{
if(Num1 > Num2)
return Num1;
else
return Num2;
}
// Str_Len 求字符串求长函数 求任意长度字符串 或 指针指向的字符串 的字符串长度,返回值为字符数加1(即字符串长度)
int Str_Len(char Str2[])
{
int i = 0;
while(Str2[i] != 0) //求长原理字符串最后以0 结尾,统计不为0,直到为0 时即可
i++;
return i + 1;
}
// Arr_Len 求字符串数组元素个数的函数,返回值为字符串数
int Arr_Len(char Str2[][ANum1]) //求元素个数要求数组中不能含有空串,该函数只统计到出现空串为止,另外数组的外层参数ANum1必须给出且与数组相同
{
int i = 0;
while(Str2[i][0] != 0) //求长原理字符串第一位不为0,统计不为0,直到为0 时即可
i++;
return i-1;
}
// char-> int 转换, s[]为待转换成数字的数字字符串,一个参数时将s[]转换成十进制数,Str_Len为数字位数
int Char_Int(char s[])
{
int Total = 0;
for(int i = 0; i < Str_Len(s)-1; i++) // Str_Len 求字符串求长函数,也可将函数定义成Char_Int(char s[],int Num)将Str_Len(s)改为Num即可
{
int Tmp = s[i]-48; //Tmp用于存储字符串各个字节处转换后的的数字s[i]-48,转换前该字节处用s[i]表示该数字字符
Total = Total * 10 +Tmp; //将各位数字字合成字符所表示的数据
}
return Total; //返回数字处理后得到的数字
}
/
/ char-> int 转换, s[]为待转换成数字的数字字符串,两个参数时将s[]转换成Num进制数并以十进制输出,Str_Len为数字位数
int Char_Int(char s[], int Num)
{
int Total = 0;
for(int i = 0; i < Str_Len(s)-1; i++) // Str_Len 求字符串求长函数,也可将函数定义成Char_Int(char s[],int Num)将Str_Len(s)改为Num即可
{
int Tmp = s[i]-48; //Tmp用于存储字符串各个字节处转换后的的数字s[i]-48,转换前该字节处用s[i]表示该数字字符
Total = Total * Num +Tmp; //将各位数字字合成字符所表示的数据
}
return Total; //返回数字处理后得到的数字
}
// int-> char 转换, char s[]为有足够长度的字符串,用于存储数字生成的字符串
char * Int_Char( int n, char s[])
{
int Tmp_n = n,Length = 0;
while(Tmp_n >= 1) //求出待转换成字符的 数字的长度Length
{
Length++;
Tmp_n /= 10; //依次除10直到小于1退出循环
}
for(int i=0; i<Length; i++)
{
Tmp_n = n%10; //对待转换的数字各位依次取余数,存入Tmp_n中
n /= 10 ; //对待转换的数字依次去尾数,以便下一次取余数
s[Length-1-i] = Tmp_n + 48; //将各位数字 依次转换成对应 数字字符 所对应的数字(即Tmp_n + 48),再存入字符串的相应位置(即s[Length-1-i]
}
s[Length] = 0; //位数字字符串 设尾
return s; //返回生成的数字字符串
}
/
/ Str_Cpy 字符串拷贝函数,将字符串从源字符串Str2拷贝到目标字符串Str1,返回值Str1所对应的字符串
char * Str_Cpy(char Str1[], const char Str2[])
{
int i = 0;
while(Str2[i] != 0)
{
Str1[i] = Str2[i];
i++;
}
Str1[i] = 0;
return Str1;
}
// Str_Cpy 字符串拷贝函数,从源字符串Str1中拷贝前Num个字符串Str2中,返回值Str2所对应的字符串
char * Str_Cpy(const char Str1[], int Num, char Str2[])
{
int i = 0;
while(Str1[i] != 0 && i<Num)
{
Str2[i] = Str1[i];
i++;
}
Str2[i] = 0;
return Str2;
}
// Str_Cpy 字符串拷贝函数,从Str1第Num1个字符的位置开始,拷贝Num2个字符到Str2中,返回值Str2所对应的字符串
char * Str_Cpy(const char Str1[], int Num1, int Num2, char Str2[])
{
int i = 0;
while(Str1[i] != 0 && i<Num2)
{
Str2[i] = Str1[i+Num1-1];
i++;
}
Str2[i] = 0;
return Str2;
}
//使得Str的长度变为Len的整数倍不足部分添加空格
char * Str_Chg(char Str[], int Len)
{
int i, LenS=Str_Len(Str);
if((LenS%Len) !=0 ) //对字符串进行处理使得Str的长度为Len的整数倍
{
for(i=LenS-1; i < ((LenS/Len + 1) * Len)-1; i++)
Str[i]=' ';
Str[i]=0;
}
return Str;
}
//字符串str2加空格添加函数,添加至str1的尾部
char * str_add(char str1[], char str2[])
{
int i = 0, j = 0;
while(str1[i] != 0) i++; //当str1到达尾部时
str1[i++] = ' '; //将结尾改为空格
while(str2[j] != 0) //并将str2非结尾部分添加至str1后
{
str1[i] = str2[j];
i++;
j++;
}
str1[i] = 0; //为str1添加结尾
字符串比较函数实现 return str1;
}
// Str_Add 将字符串Str2添加到字符串Str1的尾部
char * Str_Add(char Str1[], char Str2[] ) // 须包含Str_Len 求字符串长函数,需给Str1分配内存空间,例:char str[50]="apple"; Str_Add(str, " banana"));
{
int Num=Str_Len(Str1)-1;
for(int i=Str_Len(Str1); i > Num; i--)
Str1[(i-1)+(Str_Len(Str2)-1)] = Str1[i-1]; //将字符串1的第i-1个字符向后移动字符串Str2个字符数
for(i=0; i < Str_Len(Str2)-1; i++ )
Str1[Num+i]=Str2[i];
return Str1;
}
// Str_Add 将字符串Str2添加到字符串Str1 从左向右(0 1 2 3……)第Num处,Num=0时添加到第一个字符串前,
//Num=StrLen(Str1)-1添加到第一个字符串末尾,倒数第四个位置为StrLen(Str1)-5
char * Str_Add(char Str1[], int Num, char Str2[] )
{
for(int i=Str_Len(Str1); i > Num; i--) //须包含Str_Len 求字符串长函数
Str1[(i-1)+(Str_Len(Str2)-1)] = Str1[i-1]; //将字符串1的第i-1个字符向后移动字符串Str2个字符数
for(i=0; i < Str_Len(Str2)-1; i++ )
Str1[Num+i]=Str2[i];
return Str1;
}
// Str_Cmp_Min 字符串比较函数(按字母表的顺序)比较两个字符串的大小,输出较小的字符串对应的数字
//返回值1表示字符串Str1较小;返回值2字符串Str1较小;返回0时两个字符串相同
int Str_Cmp_Min(char Str1[], char Str2[]) //需包含构造函数Small_Num、Str_Len
{
int CM_i = Small_Num(Str_Len(Str1), Str_Len(Str2)); //取较短的字符串长度进行比较,(即比较至字符长度的后一位
for(int i = 0; i < CM_i; i++) //CM_i: Circulate Max Number i
{
if(Str1[i] == Str2[i]) //如果字符串的第一个字符相同
i++; //则跳过上一个字符
if(Str1[i] > Str2[i]) //比较字符串的第二个字符
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论