字符串操作

求字符串長度:

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int mystrlen(char *fstr)
{
	int num = 0;
	for(;*fstr != '\0';fstr++)
	{
		num++;
	}
	
    //while(*fstr != '\0')
    //{
        //num++;
        //fstr++;
    //}
    return num;
}

int main()
{
 	char str[50] = "i love you yi sheng yi shi";
 	int length = 0;
 	length = mystrlen(str);
 	//length = strlen(str);
 	printf("%d",length);
 	return 0;   
}

字符串查詢:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"


int mystrlen(char *fstr)
{
	int num = 0;
	while(*fstr != '\0')
	{
		num++;
		fstr++;
	}
	return num;
}

char* mystrstr(char *fallstr,char *faddstr,int *location)
{
    int length_fallstr = mystrlen(fallstr);
	int length_faddstr = mystrlen(faddstr);
	int i = 0, j = 0;
	int flag = 1;
	char *p = NULL;
	for(i = 0; i < (length_fallstr - length_faddstr); i++)
	{
		flag = 1;  //假設是相等的
		for(j = 0; j < length_faddstr; j++)
		{
			if(*(fallstr+i+j) != *(faddstr+j))  //出現不相等的情況
			{
				flag = 0;
				break;   //進行下一輪比較
			}
			
		}
		if(flag == 1)
		{
			p = &fallstr[i];   //取出來第一個字母
			*location = i;     //記錄第一個相同字母的位置
			break;//增加break得到第一個位置,不加得到最後的位置
		}
		
	}
	return p; //返回第一個字母
}

char* mystrstr1(char *fallstr,char *faddstr,int *location)
{
    int length_fallstr = mystrlen(fallstr);
	int length_faddstr = mystrlen(faddstr);
	char *pfallstr = fallstr;
	char *pfaddstr = faddstr;
	int flag = 1;
	char *p = NULL;
	for(pfallstr; *pfallstr != '\0'; pfallstr++)
	{
		flag = 1;  //假設是相等的
		for(pfaddstr; *pfaddstr != '\0'; pfaddstr++)
		{
			if(*(pfallstr+(pfaddstr-faddstr)) == '\0')       //防止溢出
			{
				flag = 0;
				break;   //進行下一輪比較				
			}
			if(*(pfallstr+(pfaddstr-faddstr)) != *pfaddstr)  //出現不相等的情況
			{
				flag = 0;
				break;   //進行下一輪比較
			}
		}
		if(flag == 1)
		{
			p = pfallstr;   //取出來第一個字母
			*location = pfallstr-fallstr;     //記錄第一個相同字母的位置
			break;//增加break得到第一個位置,不加得到最後的位置
		}
		
	}
	return p; //返回第一個字母
}


int main()
{
    char allstr[50] = "i love you yi sheng yi shi";
    char addstr[30] = "yi";
    char *p = NULL;
    int location = 0;
    //p = strstr(allstr,addstr);          //C編譯器自帶函數
    //p = mystrstr(allstr,addstr,&location);//以下標循環的方式查詢
    p = mystrstr1(allstr,addstr,&location);//以指針循環的方式查詢
    if(p)
    {
    	printf("find\n");
    	printf("location is %d,first alphabet is %c\n",location,*p);
    }
    else
    	printf("no find\n");
    	
    return 0;
}

字符串查詢:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"


int mystrlen(char *fstr)
{
	int num = 0;
	while(*fstr != '\0')
	{
		num++;
		fstr++;
	}
	return num;
}

char* mystrstr(char *fallstr,char *faddstr,int *location)
{
    int length_fallstr = mystrlen(fallstr);
	int length_faddstr = mystrlen(faddstr);
	int i = 0, j = 0;
	int flag = 1;
	char *p = NULL;
	for(i = 0; i < (length_fallstr - length_faddstr); i++)
	{
		flag = 1;  //假設是相等的
		for(j = 0; j < length_faddstr; j++)
		{
			if(*(fallstr+i+j) != *(faddstr+j))  //出現不相等的情況
			{
				flag = 0;
				break;   //進行下一輪比較
			}
			
		}
		if(flag == 1)
		{
			p = &fallstr[i];   //取出來第一個字母
			*location = i;     //記錄第一個相同字母的位置
			break;//增加break得到第一個位置,不加得到最後的位置
		}
		
	}
	return p; //返回第一個字母
}

char* mystrstr1(char *fallstr,char *faddstr,int *location)
{
    int length_fallstr = mystrlen(fallstr);
	int length_faddstr = mystrlen(faddstr);
	char *pfallstr = fallstr;
	char *pfaddstr = faddstr;
	int flag = 1;
	char *p = NULL;
	for(pfallstr; *pfallstr != '\0'; pfallstr++)
	{
		flag = 1;  //假設是相等的
		for(pfaddstr; *pfaddstr != '\0'; pfaddstr++)
		{
			if(*(pfallstr+(pfaddstr-faddstr)) == '\0')       //防止溢出
			{
				flag = 0;
				break;   //進行下一輪比較				
			}
			if(*(pfallstr+(pfaddstr-faddstr)) != *pfaddstr)  //出現不相等的情況
			{
				flag = 0;
				break;   //進行下一輪比較
			}
		}
		if(flag == 1)
		{
			p = pfallstr;   //取出來第一個字母
			*location = pfallstr-fallstr;     //記錄第一個相同字母的位置
			break;//增加break得到第一個位置,不加得到最後的位置
		}
		
	}
	return p; //返回第一個字母
}


int main()
{
    char allstr[50] = "i love you yi sheng yi shi";
    char addstr[30] = "yi";
    char *p = NULL;
    int location = 0;
    //p = strstr(allstr,addstr);          //C編譯器自帶函數
    //p = mystrstr(allstr,addstr,&location);//以下標循環的方式查詢
    p = mystrstr1(allstr,addstr,&location);//以指針循環的方式查詢
    if(p)
    {
    	printf("find\n");
    	printf("location is %d,first alphabet is %c\n",location,*p);
    }
    else
    	printf("no find\n");
    	
    return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章