您的位置:首页 > 职场人生

程序员面试:字符串相关问题

2012-03-20 11:04 141 查看
1.回文数判断:

int huiwenNum(long num)
{
long result =0;
long i=num;
while(i>=0)
{
result=result *10 +i%10;
i=i/10;
}
if(result ==num)
return 1;
else
return 0;
}


2.回文字符串判断:

int huiwenStr(char * str)
{
char *str1=new char[100];
memset(str1,0,100);
strcpy(str1,str);
int len=strlen(str1);
int i,j;
i=len;
j=0;
while(j!=i)
{
str1[j]=str[len-1];
j++;
len--;
}
str1[i]='\0';
if(!strcmp(str1,str))
{
delete str1;
return 1;
}
else
{
delete str1;
return 0;
}
}

当字符串很长的时候上面的算法效率会比较低,优化一下算法

int IsReverseStr(char *aStr)
{
int i,j;
int found=1;
if(aStr==NULL)
return -1;
j=strlen(aStr);
for(i=0;i<j/2;i++)
if(*(aStr+i)!=*(aStr+j-i-1))
{
found=0;
break;
}
return found;
}


3.字符串转数字, atoi重写

int atoi(char *str)
{
int base=0;
bool flag=true;
if(str[0]='-')
flag=false;
while(isdigit(*str))
base=base*10+(*str++ - '0');
return (flag)?(base):((-1)*base);
}


4.字符串倒序输出

void reverseStr(char * str)
{
assert(*str!=NULL);
int len=strlen(str);
char temp;
for(int i=0;i<len/2;i++)
{
temp=str[i];
str[i]=str[len-i-1];
str[len-i-1]=temp;
}
}
5.求两个字符串的最大公共子字符串。 如:“abcdefg” 与“adfefg”结果为“efg”

void maxSubStr(char *str1,char *str2,char *maxSubStr,)
{
assert((*str1!=NULL)&&(*str2!=NULL));
assert(*maxSubStr!=NULL);
int len1=strlen(str1);
int len2=strlen(str2);
int maxPos=-1;
int maxLen=0;
for(int i=0;i<len1;i++)
{
for(int j=0;j<len2;j++)
{
if(str1[i]==str2[j])
for(int k=1;((str1[i+k]==str2[j+k])&&(str1[i+k]!='\0'));k++)
if(k>maxLen)
{
maxLen=k;
maxPos=i;
}
}
}
if(maxPos==-1)
maxSubStr[0]='\0';
else
{
memcpy(maxSubStr,str1+maxPos,maxLen);
maxSubStr[maxLen]='\0';
}
}


6.字符串小写变大写

void uppercase(char * str)

{

int len =strlen(str);

for(size_t i=0;i<len;i++)

{

if('a'<=str[i]&&str[i]<='z')

str[i]-=('a'-'A');

}

}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: