#if 0 //给整数数组赋值数字,非数字则返回0,数字则返回数字 #define BUFSIZE 100 #define SIZE 5 char buf[BUFSIZE]; int bufp=0; int getch(void ) { printf("bupf=%d\n",bufp); return (bufp>0)? buf[--bufp]:getchar(); } void ungetch(int c) { if(bufp>=BUFSIZE) printf("ungetch:too many character\n"); else{ buf[bufp++]=c; printf("4c=%d,bufp=%d\n",c,bufp); } } int getint(int *pn) { int c,sign; while(isspace(c=getch())) { printf("cc=%d\n",c); } if(!isdigit(c)&& c!=EOF && c!='+' && c!='-'){ ungetch(c); printf("0c=%d\n",c); return 0; } sign=(c=='-')?-1:1; if(c=='+'||c=='-'){ c=getch(); printf("1c=%d\n",c); } for(*pn=0;isdigit(c);c=getch()){ *pn=10*(*pn)+(c-'0'); printf("*pn=%d\n",*pn); printf("6c=%d\n",c); } *pn *=sign; printf("5c=%d\n",c); if(c!=EOF) ungetch(c); printf("2c=%d\n",c); return c; } int main() { int n,getint(int *); int array[SIZE]={0}; int i; for(n=0; n<SIZE &&getint(&array[n])!=EOF; n++) ; for(i=0;i<SIZE;i++){ printf("%d\n",array[i]); } return 0; } #endif
#include <stdio.h>#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <assert.h>
///Debug mode
#if 0 ///strcpy字符串赋值函数实现
///法1
/*char my_strcpy(char *dest, const char *src)
{ assert(dest!=NULL && src != NULL);
while((*dest++ = *src++) != '\0');
}*/
///法2
void my_strcpy(char* Dest, const char *Src)
{
assert((Dest!= NULL)&&(Src!=NULL));
while((*Dest = *Src)!='\0')
{
Dest++; Src++;
}
}
int main()
{
int a=3;
char dest[]="abc";
///char *dest="abc"; ///error 这样传过去的是个地址,不能把字符串赋值再指针中 且字符常量存放在常量区
//char src[]="def"; char *src="def";
///can use my_strcpy(dest,src);
printf("%s\n",dest); return 0;
}
#endif
#if 0
///strcat 字符串追加函数实现
char *my_strcat(char *dest, const char *stc)
{
char *temp;
assert(dest!=NULL && stc != NULL);
while (*dest) dest++;
while ((*dest++ = *stc++) != '\0');
return temp;
}
int main()
{
int a=3;
//char dest[20]="abc";
char dest[]="abc";
char *src="def";
///can use my_strcat(dest,src);
printf("%s\n",dest); return 0;
}
#endif // 1
#if 0
///strstr字符串中子串查找函数实现
/*char my_strstr(char *str, char c) ///no use
{
for(; *str != c; str++)
if(*str == '\0')
return NULL;
else{
printf("str=%s\n",str);
return str;
}
}*/
const char *my_strstr(char *str, char *sub_str)
{
int i;
//assert(NULL != str && NULL != sub_str);
if(str==NULL||NULL==sub_str)
{
return str;
}
const char *bp=str;
const char *sp=sub_str;
///法1 更清晰
for( i= 0; bp[i] != '\0'; i++)
{
int tem = i; //tem保留主串中的起始判断下标位置
int j = 0;
while(bp[i++] == sp[j++])
{
if(sp[j] == '\0')
{
return &bp[tem];
}
}
i = tem;
}
///法2 can use
//while(*str)
//{
// bp=str;
//sp=sub_str;
//do{
//if(!*sp)
//return str;
//}while(*bp++==*sp++);
//str+=1;
//}
///查看出现次数
//int sum=0,ln=strlen(sub_str);
//while(str=strstr(str,sub_str)){
// sum++; //str+=ln;
//}
//return sum;
return NULL;
}
#if 0 //输出具有指定位置匹配的字符串的句子 #define MAXSIZE 100 int getline(char line[],int max); int strindex(char src[],char searchfor[]); char pattern[]="ould"; int main() { char line[MAXSIZE]; int found=0; while(getline(line,MAXSIZE)) if(strindex(line,pattern)>=0){ printf("%s ",line); int num=strindex(line,pattern); printf("%d \n",num); found++; } return found; } int getline(char s[],int lim) { int c,i; i=0; while(--lim>0 && (c=getchar())!=EOF && c!='\n') s[i++]=c; if(c=='\n') s[i++]=c; s[i]='\0'; return i; } int strindex(char s[],char t[]) { int i,j,k; ///左侧位置 for(i=0;s[i]!='\0';i++){ for(j=i,k=0;s[j]==t[k];j++,k++) ; if(j>0 && t[k]=='\0') return i; } ///右侧位置 /*for (i = strlen(s) - 1; i >= 0; i--) { for (j = i, k = strlen(t) - 1; k >= 0 && s[j] == t[k]; j--, k--) ; if (k < 0) return j+1; }*/ return -1; } #endif // 1
常用的字符串处理库函数的C语言实现
最新推荐文章于 2023-01-16 18:40:06 发布