用递归的方式完成strlen
int my_len(const char* str) {
static int count;
assert(str);//能够判断为不为空指针
if (*str != '\0') {
my_len(++str);
return ++count;
}
else {
count = 0;
return count;;//真正的strlen是unsigned int
}
}
用指针的方法完成strlen
int my_len1(const char* str) {
int count=0;
assert(str);
while (*str != '\0') {
count++;
str++;
}
return count;
}
用数组的方法完成strlen
int my_len2(char str[]) {
int count = 0;
int i = 0;
while (str[i] != '\0') {
i++;
count++;
}
return count;
}
int my_ncat(char* str1, const char* str2,int n) {
int i = 0;
while (*str1 != '\0') {
str1++;
}
while (i<n) {
if (*(str2 + i) != 0) {
*str1 = *(str2 + i);
i++;
str1++;
}
else {
*str1 = '\0';
break;
}
}if (i == n)
*str1 = '\0';
}
int my_cmp(const char*str1 ,const char*str2){
assert(str1 && str2);
while (*str1 == *str2) {
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
return (*str1 - *str2);
}
void my_cat(char* dest, const char* dest1) {
while (*dest != '\0'){
dest++;
}
while (*dest++ = *dest1++)//无法自己给自己追加,要往后补充一个'\0',得自己strcats是不行的
;
}
void my_copy(char* str, const char* str1) {
assert(str);
assert(str1);
while (*str++ = *str1++)
;
}
strstr模拟
char* my_strstr(const char* str1, const char* str2) {
assert(str1 && str2);
char* p = str1;
char* s1 = str1;
char* s2 = str2;
while (*p) {
s1 = p;
s2 = str2;
while (*s1 == *s2&&*p!='\0'&&*s2!='\0') {
s1++;
s2++;
}
if (*s2 == '\0') {
return (char*)p;
}
p++;
}
return NULL;
}
strtok使用(字符串分割)
//char arr1[] = "abcd.aad";
//char arr2[] = ",.";
//char* ret = strtok(arr1, arr2);
//printf("%s\t", ret);
//ret = strtok(NULL, arr2);
//printf("%s", ret);//如果中间有多个相同的分隔符,则只需要一次即可,他会自己跳过去的
strerror
FILE* pf = fopen("text.txt","r");
if (pf == NULL) {
printf("%s", strerror(errno));
}