一道面试题
一道面试题,replace(string str,string old,string new);用字串new替换str中 old字串
问题点数:0、回复次数:5Top
1 楼good_0525(gsy)回复于 2005-04-04 13:38:55 得分 0
欢迎大家来做做Top
2 楼playmud((猪头流氓)(抵制日货)(热烈庆祝火箭输球))回复于 2005-04-04 13:48:11 得分 0
int str_replay(char * source_str,char * source_word,char * target_word)
{
int i,j,k,source_str_len,num,source_word_len,target_word_len;
char a[300000],b[300000];
i=0;
j=0;
k=0;
source_str_len=strlen(source_str);
source_word_len=strlen(source_word);
target_word_len=strlen(target_word);
if(source_str_len<1 || source_word_len<1 || target_word_len<1 || source_str_len<source_word_len)
{
printf("input error!");
return 0;
}
/*for循环比strcpy要慢!
for(k=0;k<source_str_len;k++)
{
a[k]=*(source_str+k);
}
*/
strcpy(a,source_str);
while(i<source_str_len)
{
num=0;
for(k=0;k<source_word_len;k++)
{
if(a[i+k]==*(source_word+k))
{
num++;
}
}
if(num==source_word_len)
{
for(k=0;k<target_word_len;k++)
{
b[j]=*(target_word+k);
j++;
}
i=i+source_word_len;
}
else
{
b[j]=a[i];
/*a[i]='\0'*/;
i++;
j++;
}
}
b[j]='\0';
/*
for(k=0;k<j;k++)
{
*(source_str+k)=b[k];
b[k]='\0';
}
for(k=k;k<300000;k++)
{
*(source_str+k)='\0';
}
*/
strcpy(source_str,b);
return 1;
}
Top
3 楼MagicCarmack(MagiC++)回复于 2005-04-04 15:01:40 得分 0
数据结构中应该有讲!Top
4 楼sam1111(化神奇为腐朽)回复于 2005-04-04 16:13:20 得分 0
看起来是想用STL,写了一个但是没测试:
void Replace(string& str, string& oldStr, string& newStr)
{
basic_string <char>::size_type indexCh, lenNStr, lenOStr, off;
static const basic_string <char>::size_type npos = -1;
const char* c = "a";
lenNStr = newStr.length();
lenOStr = oldStr.length();
off = 0;
indexCh = str.find(oldStr, off);
while(indexCh != npos)
{
if(lenNStr > lenOStr)
{
str.insert(indexCh + oldStr.length(), c, lenNStr - lenOStr);
}
else if(lenNStr < lenOStr)
{
str.erase(indexCh + lenNStr, lenOStr - lenNStr);
}
str.replace(indexCh, lenNStr, newStr);
off = indexCh + lenNStr;
indexCh = str.find(oldStr, off);
}
}Top
5 楼du51(郁郁思扬)回复于 2005-04-04 16:21:34 得分 0
#include<iostream>
using namespace std;
char *strreplace(char *base,char *oldstr,char *newstr)
{
int base_len=strlen(base);
int oldstr_len=strlen(oldstr);
int newstr_len=strlen(newstr);
if(base_len<oldstr_len)return 0;
char *result=new char[base_len+newstr_len-oldstr_len+1];
char *temp=new char[base_len+1];
char *p=base;
int i=0;
while(*p)
{
if(strncmp(p,oldstr,oldstr_len))
{
result[i++]=*p;
p++;
}
else
{
strcpy(temp,p+oldstr_len);
strncpy(result+i,newstr,newstr_len);
strcpy(result+i+newstr_len,temp);
delete temp;
return result;
}
}
return 0;
}
int main()
{
char base[]="Hello Java";
char oldstr[]="Jav";
char newstr[]="C++";
cout<<strreplace(base,oldstr,newstr)<<endl;
system("PAUSE");
return 0;
}Top




