1 求char *p =abcd112223abcd12321abcd545345353abcd42,求字符串p中abcd出现的次数。
实现方法1:
int main()
{
char *p = "abcd112223abcd12321abcd545345353abcd42";
int cnt = 0;
while (p != NULL)
{
p = strstr(p, "abcd");
if (p != NULL)
{
cnt++;
p = p + strlen("abcd");
}
}
printf("cnt = %d \n",cnt);
return 0;
}
实现方法2:
int findcnt1(char *p, char* substr)
{
int cnt = 0;
while (p != NULL)
{
p = strstr(p, substr);
if (p != NULL)
{
cnt++;
p = p + strlen(substr);
}
}
return cnt;
}
int main()
{
char* str = "abcd112223abcd12321abcd545345353abcd42";
char *substr = "abcd";
int cnt = 0;
cnt = findcnt1(str,substr);
printf("cnt1 = %d \n", cnt);
return 1;
}
实现方法3:
int findcnt2(char *p, const char* substr, int *cnt)
{
char * str = p;
int tmp = 0;
if (!p || !substr)
{
printf("p =NULL || substr == NULL. \n");
return -1;
}
while (str != NULL)
{
str = strstr(str, substr);
if (str != NULL)
{
tmp++;
str = str + strlen(substr);
}
}
*cnt = tmp;
return 0;
}
int main()
{
char* str = "abcd112223abcd12321abcd545345353abcd42";
char* substr = "abcd";
int cnt2 = 0;
int ret = 0;
ret = findcnt2(str, substr,&cnt2);
if (ret == 0)
printf("cnt2 = %d \n", cnt2);
else
printf("findcnt2 err. \n");
return 0;
}
2 实现trim函数
int trimSpace(char *inbuf, char **outbuf)
{
int ret = 0;
char * p = inbuf;
int len = strlen(inbuf) -1 ;
int left =0, right = len;
char *tmp = NULL;
if (!inbuf)
{
ret = -1;
printf("inbuf is NULL. \n");
return -1;
}
while (p[left] == ' ')
left++;
while (p[right] == ' ')
right--;
if (left >= right)
{
*outbuf = NULL;
return ret;
}
*outbuf = (char*)malloc(right - left + 1);
memset(*outbuf, 0, right - left + 1);
strncpy(*outbuf, p + left,right - left);
return ret;
}
int main()
{
int ret = 0;
char *inbuf = " 123124 ";
char *outbuf;
ret = trimSpace(inbuf,&outbuf);
if (ret == 0)
printf("outbuf=%s.\n",outbuf);
return 0;
}