最近自己写了一些小函数,调试通过了的,VS2010 C++
主要是两个函数:找数组中弟第K大的数和第k小的数,以及子符串截取函数、拼接、颠倒输出、字符串中子串出现的次数。
1、找数组中弟第K大的数和第k小的数
自己写的寻找第k大或第k小的元素,不改变原数组的数据顺序,注意指针一定会改变原来的数据顺序,故用一个动态指针实现。
findkth函数
void findkth(int *a,int n,int k) //动态指针
{
int t,i,j,temp;
int *p1=new int[n]; //申请资源
for(i=0;i<n;i++)
p1[i]=a[i];
for(i=0;i<n-1;i++) //记录下标式选择排序法。
{
t=i;
for(j=i+1;j<n;j++)
{
if(p1[j]<p1[t])
t=j;
}
if(t!=i)
{
temp=p1[t];
p1[t]=p1[i];
p1[i]=temp;
}
}
cout<<"原数组中第"<<k<<"大的数为:"<<p1[n-k]<<endl;
cout<<"原数组中第"<<k<<"小的数为:"<<p1[k-1]<<endl;
delete []p1; //释放资源
}
2、自己写的字符串截取函数 my_substr函数 用到自己的mystrlen函数
int mystrlen(char *str)
{
int len=0;
while(*str)
{
str++;
len++;
}
return len;
}
char *my_substr(char *str,int start,int len)
{
int i,length=0;
char *p=new char[len];
length=mystrlen(str);
if(len > (length-start))
return "";
for(i=0;i<len;i++)
p[i]=str[start+i];
p[i]='\0';
return p;
}
3、字符串拼接my_strcat函数
void my_strcat(char *s1,char *s2)
{
char *p1=s1,*p2=s2;
while(*p1)
p1++;
while(*p2)
*p1++=*p2++;
*p1='\0';
}
4、字符串颠倒输出 my_strdown1与my_strdown2
void my_strdown1(char *str) //字符串颠倒输出,递归。
{
if(*str)
{
my_strdown1(str+1);
printf("%c",*str);
}
}
void my_strdown2(char *str) //字符颠倒输出。
{
char *p=str,*q=str,c;
while(*q)
q++;
q--;
for(;p<q;)
{
c=*p;
*p=*q;
*q=c;
p++;
q--;
}
}
5、字符串中子串出现的次数 my_count函数
int my_count(char *mstr,char *sstr) //比较一个字符串中子串出现的次数。指针实现。
{
/* 方法一ok!
*/
//int i,j;
// int str1len=strlen(mstr),str2len=strlen(sstr);
// int count=0;
// for(i=0;i<str1len-str2len+1;i++) //整个子串在原串种要扫描的次数,如123 abc 123 ,则子串12,要扫描5次。
// {
// for(j=0;j<str2len;j++)
// {
// if(sstr[j]!=mstr[i+j])
// break;
// }
// if(j==str2len)
// count++;
// }
// return count;
/*方法二 ok!
*/
int num=0;
char *p1,*p2;
p1=mstr;
p2=sstr;
while(*mstr!='\0')
{
//while(((*p1++)==(*p2++)) && (*p1!='\0') && (*p2!='\0')); //ok
//while(((*p1)==(*p2)) && (*p1!='\0')) //ok
while(((*p1)==(*p2)) && (*p1!='\0') && (*p2!='\0')) //ok
{
p1++;
p2++;
}
if(*p2=='\0')
num++;
p2=sstr;
p1=mstr++;
}
return num;
/*方法三 ok!
*/
/*char *temp;
int num=0;
char *p1,*p2;
p1=mstr;
p2=sstr;
while (*p1!='\0')
{
temp = p1;
if(*temp==*p2)
{
while((*temp==*p2)&&(*p2!='\0')&&(*temp!='\0'))
{
temp++;
p2++;
}
}
p1++;
if(*p2=='\0') num++;
p2=sstr;
}
return num;*/
}