1,实现puts,gets,strlen,memset
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void myPuts(char *p)//*除了变量声明以外,其他都是运算符
{ //字符串有明显的标志,都是以\0结尾
while(*p != '\0'){
putchar(*p++);
//printf("%c",*p++);
}
putchar('\n');
}
int myGets(char *p)
{
int cet=0;
if(p == NULL){
printf("内存非法\n");
return;
}
while(*p = getchar())
{
if(*p == '\n'){
return cet;
}
else{
cet++;
p++;
}
}
}
int myStrlen(char *p)
{
int cnt = 0;
while(*p++ != '\0'){
cnt++;
}
return cnt;
}
void myMemset(char *p,char c,int num)
{ int i;
/*if(*p++ != '\0'){
for(i=0;i<num;i++){
*p=c;
}
}*/
while(num){
*p++=c;
num--;
}
}
int main()
{
char *p = "abcde";
myPuts(p);
char str[128]={'\0'};
puts("请输入字符串:");
int n = myGets(str);
printf("输入的字符个数是:%d\n",n);
myPuts(str);
printf("字符串P长度是:%d\n",myStrlen(p));
char *str2 = NULL;
str2 = (char *)malloc(64);
myMemset(str2,'a',64);
str2[64] = '\0';//字符串的结束符
myPuts(str2);
return 0;
}
2,实现 strcpy,strncpy,strcat
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* myStrcpy(char* des,const char* source)
{
if(des == NULL && source == NULL){
return NULL;
}
while(*source != '\0'){
*des++ = *source++;
}
*des = '\0';
return des;
}
char* myStrncpy(char* des,const char* source,int n)
{
if(des == NULL && source == NULL){
return NULL;
}
while(*source != '\0' && n>0){
*des++ = *source++;
n--;
}
*des = '\0';
return des;
}
void myStrcat(char *dest,char *src)
{
while(*dest != '\0'){
dest++;
}
while(*src != '\0'){
*dest++=*src++;
}
dest='\0';
}
int main()
{
char strDest[128] = {'\0'};
char *src = "hello";
myStrcpy(strDest,src);
puts(strDest);
myStrncpy(strDest,src,5);
puts(strDest);
char str[128] = {"gu nian an"};
myStrcat(str,src);
puts(str);
return 0;
}
Tips:
1,基本都是利用字符串以 '/0’结尾的特性,进行字符串的遍历
2,使用strcat函数进行字符串拼接时,必须保证目标字符串dest有足够的空间写下源字符串src
3,关于strcat用法百度百科