1、求字符串长度:
int strlen(const char * str)
{
const char *s;
if (NULL == str)
{
return 0;
}
for (s = str; *s; s++){}
return (s - str);
}
2、计算字符串中是否有重复字符
//字符最多为256个,所以只要定义256的数组,标记字符出现的次数大于1即可
#define false 1
#define ture 0
int str_repeat_char(char * str)
{
char char_num[256] = {0};
char *s;
if (NULL == str)
{
return 0;
}
for (s = str; *s; s++)
{
if (char_num[*s] > 0)
return ture;
char_num[*s]++;
}
return false;
}
3、不使用其他结构反转字符串
int reverse(char * str)
{
char tmp;
char *len = str;
if (NULL == str)
{
return 1;
}
while(*len)
{
len++;
}
/* 回退到最后一个字符 */
len--;
while (str < len)
{
tmp = *str;
*str++ = *len;
*len-- = tmp;
}
return 0;
}
4、比较两个字符串是否为变位词,通过变换位置两个字符串可以相等
方法一:将两个字符串排序,然后查看两个字符串是否相等
int bitsame1(char *str1, char *str2)
{
char tmp;
int i,j;
int len1 = 0, len2 = 0;
for (i = 0; str1[i] != '\0'; i++)
{
len1++;
for (j = i+1; str1[j] != '\0'; j++)
{
if (str1[i] < str1[j])
{
tmp = str1[i];
str1[i] = str1[j];
str1[j] = tmp;
}
}
}
for (i = 0; str2[i] != '\0'; i++)
{
len2++;
for (j = i+1; str2[j] != '\0'; j++)
{
if (str2[i] < str2[j])
{
tmp = str2[i];
str2[i] = str2[j];
str2[j] = tmp;
}
}
}
if (len1 != len2)
{
return false;
}
for (i = 0; str2[i] != '\0'; i++)
{
if (str1[i] != str2[i])
{
return false;
}
}
return ture;
}
方法二:统计字符串中各字符出现的次数是否相等
int bitsame2(char *str1, char *str2)
{
int char_sum[256] = {0};
int i;
while(*str1 && *str2)
{
char_sum[*str1++]++;
char_sum[*str2++]--;
}
/* 有一个字符串为结束,表示长度不一致,此种情况肯定非变位数 */
if (*str1 != 0 || *str2 != 0 )
{
return false;
}
/* 统计数组应该全为0即可 */
for(i = 0; i < 256; i++)
{
if (0 != char_sum[i])
return false;
}
return ture;
}
5、将一个字符串中空格字符串替换为其他字符,假设字符串的末尾空间足够长
int replace_blank(char *str, char *replace)
{
int blank_num = 0;
int len = 0, new_len = 0, replace_len = 0;
if ((NULL == str)||(NULL == replace))
{
return 1;
}
while(str[len])
{
if (' ' == str[len])
{
blank_num++;
}
len++;
}
while(replace[replace_len])
{
replace_len++;
}
new_len = len + (replace_len - 1)*blank_num;
printf("%d,%d,%d,%d\n", replace_len, len, new_len,blank_num);
for(; len >= 0;len--)
{
if (' ' == str[len])
{
new_len = new_len - replace_len + 1;
memcpy(str + new_len, replace, replace_len);
new_len--;
}
else
{
str[new_len--] = str[len];
}
}
return 0;
}
未完待续