数据结构与算法2:字符串与数组
2017-11-01 15:44
525 查看
1、求字符串长度:
2、计算字符串中是否有重复字符
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;
}
未完待续
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;
}
未完待续
相关文章推荐
- 再回首,数据结构——字符串与数组的常见操作(链式存储,包含朴素匹配算法等)
- 数据结构和算法 (二)数据结构基础、线性表、栈和队列、数组和字符串
- 【数据结构与算法的语言基础】数组与字符串
- 【数据结构与算法】数组应用4:多项式计算Java版
- #数据结构与算法学习笔记#剑指Offer1:二维数组中的查找(JAVA)
- 【数据结构与算法】(一) c 语言实现数组的简单操作
- 数据结构——算法之(028)( 寻找其中的一个子字符串个数)
- 数据结构与算法——字符串排序
- Java数据结构与算法之数组(一)
- Java数据结构之字符串模式匹配算法---KMP算法
- 数据结构与算法学习笔记之 从0编号的数组
- Java之美[从菜鸟到高手演变]之数据结构基础、线性表、栈和队列、数组和字符串
- 每日一帖:数据结构与算法之字符串旋转
- Java数据结构与算法之数组排序——奇偶排序
- 数据结构——算法之(031)(将字符串中全部小写字母排在大写字母的前面)
- 数据结构与算法学习笔记——链表部分实现(数组形式)
- 数据结构与算法——数组
- 数据结构——算法之(028)( 寻找其中的一个子字符串个数)
- 数据结构与算法之 字符串
- 数据结构——算法之(036)(输出字符串的所有排列)