//字符串转整形
int str_to_int(char str[])
{
int num, i = 0, flag = 0;
if (str[i] == '+' || str[i] == '-')
{
if (str[i] == '-')
flag = 1;
++i
}
for (num = 0; str[i] != '\0'; ++ i)
{
num = 10 * num + (str[i] - '0');
}
return flag? 0 - num: num;
}
//整形转字符串
char *int_to_str(int num, char *str, int radix)
{
int flag, i, j, k = 0, mid;
char tmp;
if (num < 0)
{
str[k++] = '-';
num = 0 - num;
}
i = k;
while (num)
{
str[i++] = num % radix;
num /= radix;
}
j = i - 1;
mid = (j + k) / 2;
for (i = k; i < j; ++i, --j)
{
tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
return str;
}
//查找字串在母串中出现的次数
int num_zizhuan(char *str1, char *str2)
{
int count = 0;
char *s, *s1, *s2;
s = str1;
while (*s != '\0')
{
s1 = s;
s2 = str2;
while (*s1 != '\0' && *s1 == *s2)
{
++s1;
++s2;
}
if (*s2 == '\0')
++count;
++s;
}
return count;
}
//查找第一个匹配子串位置,如果返回的是s1长度len1表示没有找到
int locate(char str1, char str2)
{
int i, j, k, len1, len2;
len1 = strlen(str1);
len2 = strlen(str2);
if (len1 < len2)
return len1;
for (i = 0; i < len1 - len2; ++ i)
{
for (j = i, k = 0; j < len1 && str1[j] == str2[k]; ++j, ++k);
if (k == len2)
break;
}
return i;
}
//实现strcpy函数
char *strcpy(char *dest, const char *sour)
{
assert (NULL != dest && NULL != sour);
char *s;
s = dest;
while (*s++ = *sour++);
return dest;
}
//实现strcmp函数
int strcmp(char *str1,char *str2)
{
assert(str1 != NULL && str2 != NULL);
while (*str1 != '\0' && *str1 == *str2)
{
++str1;
++str2;
}
if (*str1 == *str2)
return 0;
else if (*str1 > *str2)
return 1;
return -1;
}
//实现字符串翻转
void reserve(char* str)
{
assert(str != NULL);
int i, len;
char tmp;
len = strlen(str);
for (i = 0; i < len / 2; ++ i)
{
tmp = str[i];
str[i] = str[len - 1 - i];
str[len - 1 - i] = tmp;
}
return;
}
//给定字符串A和B,输出A和B中的最大公共子串长度
char *com_str(char *shortstr, char *longstr)
{
assert(shortstr != NULL && longstr != NULL);
int len1, len2, i, j, max, **a;
len1 = strlen(longstr);
len2 = strlen(shortstr);
a = new int *[len1 + 1];
for (i = 0; i <= len1; ++i)
a[i] = new int *[len2 + 1];
for (i = 0; i <= len1; ++i)
for (j = 0; j <= len2; ++j)
a[i][j] = 0;
for (i = 1, max = 0; i <= len1; ++i)
for (j = 1; j <= len2; ++j)
{
if (longstr[i - 1] == shortstr[j - 1])
a[i][j] = a[i - 1][j - 1] + 1;
if (a[i][j] > max)
max = a[i][j];
}
return max;
}
//判断一个字符串是不是回文
int IsReverseStr(char *str)
{
assert(str != NULL);
int len, i;
len = strlen(str);
for (i = 0; i < len / 2; ++i)
{
if (str[i] != str[len - i - 1])
return 0;
}
return 1;
}
//写一个函数, 在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数所指内存。
int num_max(char *outstr, char *instr)
{
assert(outstr != NULL && instr != NULL);
int count, max, i, flag, len, start, m_start;
len = strlen(instr);
count = max = flag = start = m_start = 0;
for (i = 0; i < len; ++i)
{
if (instr[i] <= '9' && instr[i] >= '0')
{
if (0 == flag)
{
start = i;
flag = 1;
}
++count;
}
else
{
if (1 == flag)
{
flag = 0;
if (count > max)
{
max = count;
m_start = start;
count = 0;
}
}
}
}
for (i = m_start; i < max; ++i)
outstr[i - m_start] = instr[i];
outstr[i - m_start] = '\0';
return max;
}
面试中的一些字符串操作
最新推荐文章于 2019-09-22 09:35:50 发布