temp[i++] = '-';
}
temp[i] = '\0';
i--;
//将temp数组中逆序输入到str数组中
//将"4321-" ====> "-1234"
while(i >= 0)
{
str[j] = temp[i];
j++;
i--;
}
//字符串结束标识
str[j] = '\0';
}
int main()
{
int a = +123;
char s[100];
itoa_mf(a,s);
cout << s << endl;
}
二,找出字符串的最长子串,要求子串的所有字符相同
例如:str ="sssddddabcdef" 则输出字串为:dddd
[html]
#include
#include
#include
char* GetSubstring(char* strSource)
{
char* strSubstring; //用于保存得到的子串,大小在找到最大子串后再确定,作为返回值
int nLen; //源字符串长度
int nCurPos; //当前统计字符串的头指针位置(相对于原字符串第一个字符的位置)
int nCurCount; //当前统计字符串的长度(有相同字符组成的子字符串)
int nPos; //当前最长的子串的头指针位置
int nCount; //当前最长的子串的长度
nLen = strlen(strSource);
//初始化变量
nCount = 1;
nPos = 0;
nCurCount = 1;
nCurPos = 0;
//遍历整个字符串
for(int i = 1; i < nLen; i++)
{
if(strSource[i] == strSource[nCurPos])//如果当前字符与子串的字符相同,子串长度增1
nCurCount++;
else //如果不相同,开始统计新的子串
{
if(nCurCount > nCount)//如果当前子串比原先最长的子串长,把当前子串信息(起始位置 + 长度)保留下来
{
nCount = nCurCount;
nPos = nCurPos;
}
//长度复值为1,新串的开始位置为i
nCurCount = 1;
nCurPos = i;
}
}
//为返回的子串分配空间(长度为nCount,由于要包括字符串结束符\0,故大小要加1)
strSubstring = (char*)malloc(nCount + 1);
//复制子串(用其他函数也可以)
for(int i = 0; i < nCount; i++)
strSubstring[i] = strSource[nPos + i];
strSubstring[nCount] = '\0';
return strSubstring;
}
int main()
{
//输入一个字符串strSource
char *strSource="absceeeecd";
char* strSubstring = GetSubstring(strSource);
printf("最长子串为:%s\n长度为:%d",strSubstring,strlen(strSubstring));
//释放strSubstring
free(strSubstring);
}
三,求两个字符串的最大公共子字符串
算法时间复杂度:O(n^2)
思想:两个字符串先从第一个字串的第一个字符开始,依次与第二个字串的各个位置字串比较字串
需要记录下最长公共子串在str1中的位置和子串长度
[html]
#include
#include
#include
using namespace std;
void findMaxSubstr(const char * str1 , const char * str2 , char * maxSubstr)
{
assert((str1!=NULL)&&(str2!=NULL));
assert(maxSubstr!=NULL);
int maxPos=-1;
int maxLen=0;
int k;
for(int i=0; i {
for(int j=0; j {
if(str1[i]==str2[j])
{
for(k=1; (str1[i+k]==str2[j+k])&&(str1[i+k]!='\0'); k++)
;
if(k>maxLen)
{
maxPos=i;
maxLen=k;
}
}
}
}
if(maxPos==-1)
{
maxSubstr[0]='\0';
}
else
{
memcpy(maxSubstr , str1+maxPos , maxLen);
maxSubstr[maxLen]='\0';
}
}
int main()
{
char substr[20];
findMaxSubstr("tianshuai" , "mynameistianshuai" , substr);
cout< return 0;
}
四,字符串查找并记录出现次数(普通与kmp)(观察strstr实现),替代
函数原型:extern char *strstr(char *str1, char *str2);
功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)
使用:printf("%s",strstr("tianshuai","shuai"));
输出:shuai
实现:
[html]
#include "stdio.h"
char *strstr(char *buf, char *sub)
{
register char *bp;
register char *sp;
if (!*sub)
return buf;
while (*buf)
{
bp = buf;
sp = sub;
do
{
if (!*sp)
return buf;
} while (*bp++ == *sp++);
buf += 1;//从下一个位置查找