一、strlen
1.使用
比较简单,直接上代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "abcdef";
int sz = strlen(arr);
printf("%d\n", sz);
return 0;
}
结果:6
2.模拟实现
1)计数器
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int my_strlen(const char* p)
{
int count = 0;
while (*p++)
{
count++;
}
return count;
}
int main()
{
char arr[] = "abcdef";
int sz = my_strlen(arr);
printf("%d\n", sz);
return 0;
}
2.指针-指针
int my_strlen(const char* p)
{
int count = 0;
char* start = p;
while (*p++)
{
;
}
//p指向'\0'停止循环,但还会进行一次++,所以下面用--p
return --p - start;
}
3.递归
二、strcpy
1.使用
直接上代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main ()
{
char str1[]="Sample string";
char str2[40];
char str3[40];
strcpy (str2,str1);
strcpy (str3,"copy successful");
printf ("str1: %s\nstr2: %s\nstr3: %s\n",str1,str2,str3);
return 0;
}
结果:
str1: Sample string str2: Sample string str3: copy successf
2.模拟实现
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
char* my_strcpy(char* dst, const char* src)
{
char* cp = dst;
assert(dst && src);
while (*cp++ = *src++)
;
return(dst);
}
int main()
{
char arr1[10];
char arr2[] = "hello";
printf("%s\n", my_strcpy(arr1, arr2));
return 0;
}
三、strcmp
1.使用
char key[] = "apple";
char buffer[80];
do {
printf ("Guess my favorite fruit? ");
fflush (stdout);
scanf ("%79s",buffer);
} while (strcmp (key,buffer) != 0);
puts ("Correct answer!");
只有输入的字符串等于 "apple"才会输出Correct answer!
2.模拟实现
strcmp是怎么比较两个字符串的大小的?
比较第一个不相等的字符的ASCLL码值的大小
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int my_strcmp(const char*key, const char* buffer)
{
while (*key++ == *buffer++ && *key != '\0');
{
;
}
return (*key - *buffer);
}
int main()
{
char key[] = "apple";
char buffer[80];
do {
printf("Guess my favorite fruit? ");
fflush(stdout);
scanf("%79s", buffer);
} while (my_strcmp(key, buffer) != 0);
puts("Correct answer!");
return 0;
}
四、strcat
1.使用
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
char* my_strcat(char* dest, const char* src)
{
}
int main()
{
char str[80];
strcpy(str, "these ");
strcat(str, "strings ");
strcat(str, "are ");
strcat(str, "concatenated.");
puts(str);
return 0;
}
2.模拟实现
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
char* my_strcat(char* dest, const char* src)
{
char* start = dest;
while (*start)
{
start++;
}
while (*start++ = *src++)
{
;
}
}
int main()
{
char str[80];
strcpy(str, "these ");
my_strcat(str, "strings ");
my_strcat(str, "are ");
my_strcat(str, "concatenated.");
puts(str);
return 0;
}
五、strstr
在一个字符串中找一个字符串第一次出现的位置
1.使用
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "This is a simple string";
char* pch;
pch = strstr(str, "simple");
if (pch != NULL)
strncpy(pch, "sample", 6);
puts(str);
return 0;
}
2.模拟实现
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <assert.h>
char* my_strstr(char* str1, char* str2)
{
char* p = str1;
char* s1 = p;
char* s2 = str2;
assert(s1 && s2);
if (*s2 == '\0')
return str1;
while (*p)
{
s1 = p;
s2 = str2;
while (*s1 == *s2 && s1 && s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
return p;
p++;
}
return NULL;
}
int main()
{
char str[] = "This is a simple string";
char* pch;
pch = my_strstr(str, "simple");
if (pch != NULL)
strncpy(pch, "sample", 6);
puts(str);
return 0;
}