//自主实现字符串函数
strset(char * str, char c)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//
void myStrrev(char *p){ //字符串逆转
int length = strlen(p);
int tmp =0;
for (int i = 0; i < length/2; ++i) {
tmp = p[i];
p[i] =p[length-1-i];
p[length-1-i] = tmp;
}
}
void main11(){ //字符串逆转
char str[18] ="China is great";
//strrev(str);
myStrrev(str);
printf("%s\n",str); // taerg si anihC
}
//
//字符串大小写转换
void myStrupr(char *p){
while (*p != '\0'){
if(*p >='a' && *p <='z'){
*p = *p - 32;
}
p++;
}
}
void myStrlwr(char *p){
while (*p != '\0'){
if(*p >='A' && *p <='Z'){
*p = *p + 32;
}
p++;
}
}
void main12(){ //字符串大小写转换
char str[18] ="China is great";
//strupr(str);
myStrupr(str);
printf("%s\n",str); // CHINA IS GREAT
//strlwr(str);
myStrlwr(str);
printf("%s\n",str); // china is great
}
//
int myStrlen(char *p){ //求字符串长度
int i = 0;
while (*p != '\0'){
p++;
i++;
}
return i;
}
void main13(){ //求字符串长度
char str[18] ="China is great";
printf("%d\n",strlen(str)); // 14
printf("%d\n",myStrlen(str)); // 14
}
//
void myStrcpy(char *dest, char*source){ //求字符串拷贝
if(dest == NULL || source == NULL){
return;
} else{
while (source != NULL){
*dest =*source;
dest++;
source++;
}
*dest = '\0'; //dest[0] = '\0';
}
}
void main14(){ //求字符串拷贝
char str1[18] ="China is great";
char str2[20];
//strcpy(str2,str1);
myStrcpy(str2,str1);
printf("%s\n",str2); //China is great
}
//
void myStrcat(char *dest, char*source){ //求字符串连接
if(dest == NULL || source == NULL){
return;
} else{
//char *p =(char *) realloc(dest,strlen(dest)+strlen(source)+1);
int destLen = strlen(dest);
dest = dest +destLen;
while (*source != '\0'){
*dest =*source;
dest++;
source++;
}
*dest = '\0'; //dest[0] = '\0';
}
}
void main15(){ //求字符串连接
char str1[18] ="China is";
char str2[20] = " great";
//strcat(str1,str2);
myStrcat(str1,str2);
printf("%s\n",str1); //China is great
}
char * myStrchr(char *str, char ch){ //字符查找
while (*str !='\0'){
if(*str == ch){
return str;
}
str++;
}
return NULL;
}
void main16(){ //字符查找
char str[18] ="China is great";
char ch = 'a';
char *p = strchr(str,ch); //找到返回其位置,没有找到范返回NULL
printf("%s\n",p); //a is great
p = myStrchr(str,ch);
printf("%s\n",p); //a is great
}
int myStrcmp(char *str1, char *str2){ //字符比较
while (*str1 == *str2){
if(*str1 == '\0' && *str2 == '\0'){
return 0;
}
str1++;
str2++;
}
return -1;
}
void main17(){ //字符比较
char *str1 ="China is great";
char *str2 ="China is great";
/* if(str1 == str2){ //C语言无法这样进行字符串比较,str1和str2都是地址
printf("equality");
}*/
if(strcmp(str1,str2) == 0){
printf("equality");
}
if(myStrcmp(str1,str2) == 0){
printf("equality");
}
}
char * myStrstr(char *str1, char *str2){ //字符串的查找,也可以用下表法,数组的方式
char *p = str1; //指针初始化可以用 void *p; void类型的指针可以转换成任意类型
// char *p = (char *)p;
char *str2Begin = str2;
while (*str1 != '\0'){
p = str1; //为了保存,str2的第一个字符在str1中出现的位置,返回以后返回
str2 = str2Begin; //
while (*str1 == *str2 || *str2 == '\0'){ //*str2 == '\0' 为了最后一位进行比较的数据,可以进入if判断,返回p,防止进入死循环
if(*str2 == '\0') {
return p;
}
str2++; //str1和str2中第一个字符相等了就继续往后移动
str1++;
}
str1 =p; //千万别漏掉这一步,在与子串比较过程中,str1已经往后移动一大步
str1++; //主串中未找到就继续往后移动
}
}
void main(){ //字符串的查找
char *str1 ="Chiniiss is great";
char *str2="is";
char *p = strstr(str1,str2);
printf("%s\n",p);
char *myP= myStrstr(str1,str2);
printf("%s\n",myP);
}