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;
}