面试中的一些字符串操作

来源:互联网 发布:java 调用http请求 编辑:程序博客网 时间:2024/06/10 02:01
//字符串转整形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;}

0 0