微软笔试题3
2006-07-24 16:26
423 查看
把字符串S中所有子串A替换成子串B,使用自定义的strstr
#include<iostream>
using namespace std;
char* My_strstr(char *str1, const char *str2 )
{
assert(str1 != NULL && str2 != NULL);
char *p = str1;
const char *q = str2;
while(*str1 != '/0' && *str2 != '/0')
{
if(*str1 == *str2)
{
++str1;
++str2;
}
else
{
str1 = ++p;
str2 = q;
}
}
if(*str2 == '/0')
{
return p;
}
return NULL;
}
void str_A_to_B(char *str,const char *subA,const char *subB)
{
assert(str != NULL && subA != NULL && subB != NULL);
int lenA = strlen(subA);
int lenB = strlen(subB);
char *p = str;
while(p != NULL)
{
p =My_strstr(str,subA);
if(p != NULL)
{
if(lenA == lenB)
{
strncpy(p,subB,lenA);
}
else if(lenA > lenB)
{
char *ptr = p + lenA;
char *ps = p +lenB;
while(*ptr != '/0')
{
*ps++ = *ptr++;
}
strncpy(p,subB,lenB);
}
else
{
int newlen = strlen(str);
char *ptr = &str[newlen-1];
char *ps = p + lenA;
int sp = lenB-lenA;
while(ptr >= ps)
{
*(ptr+sp) = *ptr;
--ptr;
}
strncpy(p,subB,lenB);
}
}
else
{
break;
}
p = My_strstr(str+lenA,subB);
}
}
int main()
{
char str[200];
memset(str,0,200);
strcpy(str,"pqrstaaaaajkjk");
char ch = 'a';
cout<<str<<endl;
char *subA = "aa";
char *subB = "QQQQQ";
str_A_to_B(str,subA,subB);
cout<<str<<endl;
system("pause");
return 0;
}
#include<iostream>
using namespace std;
char* My_strstr(char *str1, const char *str2 )
{
assert(str1 != NULL && str2 != NULL);
char *p = str1;
const char *q = str2;
while(*str1 != '/0' && *str2 != '/0')
{
if(*str1 == *str2)
{
++str1;
++str2;
}
else
{
str1 = ++p;
str2 = q;
}
}
if(*str2 == '/0')
{
return p;
}
return NULL;
}
void str_A_to_B(char *str,const char *subA,const char *subB)
{
assert(str != NULL && subA != NULL && subB != NULL);
int lenA = strlen(subA);
int lenB = strlen(subB);
char *p = str;
while(p != NULL)
{
p =My_strstr(str,subA);
if(p != NULL)
{
if(lenA == lenB)
{
strncpy(p,subB,lenA);
}
else if(lenA > lenB)
{
char *ptr = p + lenA;
char *ps = p +lenB;
while(*ptr != '/0')
{
*ps++ = *ptr++;
}
strncpy(p,subB,lenB);
}
else
{
int newlen = strlen(str);
char *ptr = &str[newlen-1];
char *ps = p + lenA;
int sp = lenB-lenA;
while(ptr >= ps)
{
*(ptr+sp) = *ptr;
--ptr;
}
strncpy(p,subB,lenB);
}
}
else
{
break;
}
p = My_strstr(str+lenA,subB);
}
}
int main()
{
char str[200];
memset(str,0,200);
strcpy(str,"pqrstaaaaajkjk");
char ch = 'a';
cout<<str<<endl;
char *subA = "aa";
char *subB = "QQQQQ";
str_A_to_B(str,subA,subB);
cout<<str<<endl;
system("pause");
return 0;
}
相关文章推荐
- 一道微软MiniTest笔试题
- 微软笔试 Font Size
- 微软2016校园招聘4月在线笔试 A FontSize
- 微软2016校园招聘4月在线笔试 hihocoder 1288 Font Size (模拟)
- Demo Day (微软2016校园招聘4月在线笔试)
- 【hihocoder1291 微软2016校园招聘4月在线笔试D】【逆序思维 并查集】Buiding in Sandbox 我的世界建方块合法性判定
- hihocoder 1289 2017年微软实习笔试题
- 微软笔试题 跳台阶问题
- 微软2014校招笔试题-String reorder
- 微软笔试
- Hihocoder #1095 : HIHO Drinking Game (微软笔试题)
- Disk Storage(微软笔试)
- 微软实习笔试
- 2013年微软校园招聘笔试题
- 微软2013校园招聘笔试题(9.22 第一次笔试)
- 微软2013校园招聘笔试题
- 微软校园招聘笔试题
- 微软、谷歌、腾讯等笔试题之随机概率问题
- 【2014微软实习生笔试】3:逆序数问题
- 微软笔试题 HihoCoder#1136: Professor Q's Software 题解