一、有关字符串操作的一系列函数
1.strlen (计算字符串长度)
即计算在结束符'\0'前的所有字符个数
#include<stdio.h>
int Strlen(char str[])
{
int i = 0;
while(str[i] != '\0')
{
++i;
}
return i;
}
int main(void)
{
char s[20] = "hello";
printf("len = %d\n",Strlen(s));
return 0;
}
2.strcpy (字符串的复制)
将src中的字符分别复制到dest中,直到遇到结束符'\0'为止,且要在dest中补充结束符
#include<stdio.h>
void Strcpy(char dest[],char src[])
{
int i = 0;
#if 0
while(src[i] != '\0')
{
dest[i] = src[i];
++i;
}
dest[i] = '\0';
#endif
while(dest[i] = src[i])
{
++i;
}
}
int main(void)
{
char s[20] = "hello";
char s2[20];
printf("%s\n",s);
printf("----copy----\n");
Strcpy(s2,s);
printf("%s\n",s2);
return 0;
}
3.strcmp (比较字符串的大小)
当两字符串同一位置为相同字符,或者两者之一没有遇到结束符'\0'时,执行比较字符大小的操作
#include<stdio.h>
int Strcmp(char s1[],char s2[])
{
int i = 0;
int ret;
while(s1[i]!='\0' && s2[i]!='\0' && s1[i]==s2[i])
{
++i;
}
if(s1[i] > s2[i])
{
ret = 1;
}else
{
ret = 0;
}
return ret;
}
int main(void)
{
char s1[20];
char s2[20];
gets(s1);
gets(s2);
if(Strcmp(s1,s2) == 1)
{
printf("max = %s\n",s1);
}else
{
printf("max = %s\n",s2);
}
return 0;
}
4.strcat (字符串的拼接)
从目的字符串dest的结束符位置开始,将src中的字符一一拼接到dest中,并检查是否补充了结束符
#include<stdio.h>
void Strcat(char dest[],char src[])
{
int i = 0;
int j = 0;
while(dest[i] != '\0')
{
++i;
}
while(src[j] != '\0')
{
dest[i] = src[j];
++i;
++j;
}
dest[i] = '\0';
}
int main(void)
{
char s1[20] = "hello";
char s2[20] = "world";
//gets(s1);
//gets(s2);
printf("%s\n",s1);
printf("%s\n",s2);
printf("----Strcat----\n");
Strcat(s1,s2);
printf("%s\n",s1);
return 0;
}
二、几种排序的函数表达
1.选择排序
#include<stdio.h>
void printArray(int a[],int len)
{
int i = 0;
for(i = 0;i<len;++i)
{
printf("%d ",a[i]);
}
putchar('\n');
}
void choiceArray(int a[],int len)
{
int i = 0;
int j = 0;
for(i = 0;i<len;++i)
{
for(j = i+1;j<len;++j)
{
if(a[i]>a[j])
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
}
int main(void)
{
int a[] = {5,3,7,10,2,1,8,9,6,4};
int len = sizeof(a)/sizeof(a[0]);
printArray(a,len);
choiceArray(a,len);
printf("-----change-----\n");
printArray(a,len);
return 0;
}
2.冒泡排序
#include<stdio.h>
void printArray(int a[],int len)
{
int i = 0;
for(i = 0;i<len;++i)
{
printf("%d ",a[i]);
}
putchar('\n');
}
void bubbleArray(int a[],int len)
{
int i = 0;
int j = 0;
for(i = len-1;i>0;--i)
{
for(j = 0;j<i;++j)
{
if(a[j]>a[j+1])
{
int t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
}
int main(void)
{
int a[] = {5,3,7,10,2,1,8,9,6,4};
int len = sizeof(a)/sizeof(a[0]);
printArray(a,len);
bubbleArray(a,len);
printf("-----change-----\n");
printArray(a,len);
return 0;
}
3.插入排序
#include<stdio.h>
void printArray(int a[],int len)
{
int i = 0;
for(i = 0;i<len;++i)
{
printf("%d ",a[i]);
}
putchar('\n');
}
void insertArray(int a[],int len)
{
int i = 0;
int j = 0;
for(i = 0;i<len;++i)
{
int t = a[i];
j = i;
while(j>0 && t<a[j-1])
{
a[j] = a[j-1];
--j;
}
a[j] = t;
}
}
int main(void)
{
int a[] = {5,3,7,10,2,1,8,9,6,4};
int len = sizeof(a)/sizeof(a[0]);
printArray(a,len);
insertArray(a,len);
printf("-----change-----\n");
printArray(a,len);
return 0;
}
三、二分查找
#include<stdio.h>
void printArr(int a[5],int len)
{
int i = 0;
for(i = 0;i<len;++i)
{
printf("%d ",a[i]);
}
putchar('\n');
}
int binarySearch(int a[],int len)
{
int n;
int begin = 0;
int end = len - 1;
int mid = 0;
scanf("%d",&n);
while(begin <= end)
{
mid = (end + begin)/2;
if(a[mid] > n)
{
end = mid - 1;
}
else if(a[mid] < n)
{
begin = mid + 1;
}
else
{
return 1;
}
if(begin > end)
{
return -1;
}
}
}
int main(void)
{
int a[5] = {1,2,3,4,5};
int len = sizeof(a)/sizeof(a[0]);
int ret = binarySearch(a,5);
if(ret == 1)
{
printf("found num!\n");
}
else
{
printf("not found!\n");
}
printArr(a,5);
return 0;
}