1. 字符串逆序
#include <stdio.h>
#include <string.h>
void revert(char *src) {
int length, i;
char *dest;
length = strlen(src);
//printf("length = %d\n", length);
dest = (char *)malloc(length);
for(i=0;i<length;i++) {
*(dest+i) = *(src+length-1-i);
}
memcpy(src, dest, length);
free(dest);
}
void main(void) {
char str[] = "abcdef";
printf("before: %s\n", str);
revert(str);
printf("after: %s\n", str);
}
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool symmetric(char *str) {
int length = strlen(str);
int i;
for(i=0;i<length/2;i++) {
if(str[i] == str[length-1-i])
continue;
else
return false;
}
return true;
}
void main(void) {
char str[256];
bool flag = false;
printf("input characters: ");
scanf("%s", str);
//printf("you inputed: %s\n", str);
flag = symmetric(str);
printf("symmetric? %s\n", flag?"yes":"no");
}
3. 数组排序 - 快速排序
#include <stdio.h>
void QuickSort(int a[], int n) {
int i=0, j=n-1, key=a[0];
if(n>1) { //退出条件:只剩一个元素
while(i<j) { //一次排序退出条件:i=j
for(;j>i;j--) { //从后往前找第一个<key的元素,找到后放到a[i]
if(a[j]<key) {
a[i] = a[j];
break;
}
}
for(;i<j;i++) { //从前往后找第一个>key的元素,找到后放到a[j]
if(a[i]>key) {
a[j]=a[i];
break;
}
}
}
a[i]=key; //一次排序结束后,将key赋给a[i]
QuickSort(a,i); //递归,排序前i个元素
QuickSort(a+i+1,n-i-1); //递归,排序a[i]后面的n-i-1个元素
}
}
void main(void) {
int a[]={3,8,7,1,2,5,6,4};
int length, i;
length = sizeof(a)/sizeof(int);
printf("length = %d\n", length);
//before sort
for(i=0;i<length;i++)
printf("%d ", a[i]);
printf("\n");
//sort
QuickSort(a,length);
//after sort
for(i=0;i<length;i++)
printf("%d ", a[i]);
printf("\n");
}
4. strcmp, strncmp, memcmp
参考:http://blog.csdn.net/ttgoo/article/details/5828978
int strcmp(const char *cs, const char *ct) {
signed char _res;
while(1) {
if((_res = *cs -*ct++) != 0 || !*cs++)
break;
}
return _res;
}
int strncmp(const char *cs, const char *ct, size_t count) {
signed char _res;
while(count) {
if((_res = *cs -*ct++) != 0 || !*cs++)
break;
count--;
}
return _res;
}
int memcpy(const void *cs, const void *ct, size_t count) {
const unsigned char *su1, *su2;
int res = 0;
for(su1 = cs, su2 = ct; count > 0; ++su1, ++su2, count--) {
if((res = *su1 - *su2) != 0)
break;
}
return res;
}