1.strlen函数:

作用:检测字符串实际长度。


 如:

#include<stdio.h>
int main()
{
     char s[]="1234567";
     int a=strlen(s);
     printf("%d",a);
     return 0;
}


答案:a=7

 实际上strlen检测的是'\0',strlen函数碰到'\0'就返回'\0'以前的字符数

再比如: 

char f[]="123456\01111"; 
 
int b=strlen(f);

答案:b=6,因为遇到了'\0' 

char h[4]={'f','0',0,'h'} ;


//注:不能写成char h[4]="f0\0h";因为以""括起来的为字符串, 它隐式的以'\0'结尾,而'\0'也占一个字节,所以应写为char h[5]="f0\0h";


int c=strlen(h);


答案:c=2,因为遇到了'\0'(注意'0'不等于'\0',而0等于'\0')


不使用库函数实现代码如下:


>#include<stdio.h>
#include<assert.h>
int my_strlen(char *dest)
{
	int count = 0;
	assert(*dest!=NULL);
	while(*dest++)
	{
	    count++;
	}
	return  count;
}
int main()
{
	int system();
	int ret = 0;
	char arr[20]="we are happy";
	ret=my_strlen(arr);
	printf("%d\n",ret);
	return 0;
}


不用参数编写strlen函数:(递归函数)

#include <stdio.h>
#include <assert.h>
int my_strlen(const char *str)
{
	assert(str);
	if (*str)
	{
		return 1+my_strlen(++str);
	}
	else 
	{
		return 0;
	}
}
int main()
{
	int ret = 0;
	char arr[] = "abcdef";
	ret = my_strlen(arr);
	printf("%d",ret);
	return 0;
}


简单代码:

#include <stdio.h>
#include <assert.h>
int my_strlen(const char *str)
{
	assert(str);
	return (*str)?(1+my_strlen(str+1)):0;
}
int main()
{
	int ret = 0;
	char arr[] = "abcdef";
	ret = my_strlen(arr);
	printf("%d",ret);
	return 0;
}


2.strcpy函数:

作用:把后面的字符串复制给前面的字符串。


 例如: 定义一个字符串char a[20],和一个字符串c[]="i am a student!"; 把c复制到a中就可以这样用:strcpy(a,c); 这个函数包含在头文件 中.



 程序代码: 



#include<stdio.h>
#include<string.h>
int main() 
{
     char a[20]={0};
     char c[]="i am teacher!";
     strcpy(a,c); 
     printf("%s",a);
     return 0;
}


不使用库函数实现代码如下:


#include<stdio.h>
#include<assert.h>
char*  my_strcpy(char *dest,char *src)
{
	assert(*dest!=NULL);
	assert(*src!=NULL);
	while(*dest++=*src++);
	*dest='\0';
}
int main()
{
	int system();
	char arr[10];
	my_strcpy(arr,"happy");
	printf("%s\n",arr);
	return 0;
}


3.strstr函数:


 头文件:#include <string.h>
strstr()函数用来检索子串在字符串中首次出现的位置。



其原型为: char *strstr( char *str, char * substr );
【参数说明】str为要检索的字符串,substr为要检索的子串。
【返回值】返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL。
【函数示例】strstr()函数的使用。

#include<stdio.h>
#include<string.h>
int main()
{
     char str[] = "http://see.xidian.edu.cn/cpp/u/xitong/";
     char*substr ="see";
     char*s =strstr(str, substr);
     printf("%s\n", s);
     return0;
}


运行结果:

see.xidian.edu.cn/cpp/u/xitong/


不使用库函数实现代码如下:


#include <stdio.h>
#include <string.h>
#include <assert.h>
int get_line(char line[],int limit)
{
	int ch = 0;
	int i = 0;
	while(--limit>1 && (ch = getchar()) && ch != '\n' && ch != EOF)
	{
		line[i++] = ch;
	}
	if(ch == '\n')
		line[i++] = '\n';
	line[i] = '\0';
	return i;
}
const char *match_str(const char *str,const char *substr)
{
	const char *cur = str;
	const char *str1 = NULL;
	const char *str2 = NULL;

	assert(str);
assert(substr);
if(*substr == '\0')
	{
		return str;
	}
    while(*cur)
	{
		str1 = cur;
		str2 = substr;
		while((*str1 == *str2) && (*str1))
		{
			str1++;
			str2++;
		}
		if(*str2 == '\0')
			return cur;
		cur = cur+1;
	}
	return NULL;
}
int main()
{
	char line[1024] = {0};
	while(get_line(line,1024))
	{
		if(match_str(line,"xy")!= NULL)
		{
			printf("%s",line);
		}
	}
	return 0;
}