初级题,大佬勿入~
这个题的难度主要在一些细节,要不要取等呀要不要加一呀,稍微一不留神哪里多一位少一位,整个结果就不对了
边敲代码编写注释、及时在草稿纸上举一个简单的实例确认这个地方要不要取等(而不是侥幸乱猜)、规范变量命名(能看出实际意义而不是用一堆意味不明的字母)都是好习惯!
题目:
请你编写一个字符串处理的函数,其功能是在字符串A中查找字符串B,并将A中出现的第一个B用字符串C替换,函数返回1;如果A中不存在字符串B则将字符串C连接到字符串A的后面,函数返回0。
函数的定义如下:
int replaceStr(char A[ ], const char B[ ], const char C[ ]) { }
本题的框架代码如下,你只需将未完成的函数补充完成。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <cstring>
using namespace std;
int replaceStr(char A[ ], const char B[ ], const char C[ ])
{
//补充代码,完成此函数
}
int main()
{
char str1[110], str2[110], str3[110];
int nRes;
cin.getline(str1, 100);
cin.getline(str2, 100);
cin.getline(str3, 100);
nRes = replaceStr(str1, str2, str3);
printf("%d", nRes);
printf("%s", str1);
return 0;
}
输入格式
3行,第一行字符串A,第2行字符串B,第3行字符串C
输出格式
2行,第2行一个整数,输出replaceStr函数的返回值,第2行一个字符串,经过处理后的字符串A。
输入样例
Hello world!
world
baby
输出样例
1
Hello baby!
特殊提示
输入字符串的长度不超过100。
代码(已ac):
(这家伙不会用C++诶 谅解一下菜鸟吧)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int replaceStr(char A[], const char B[], const char C[])
{ //在A中搜索B第一次出现的位置并且用C替换B
int la, lb, lc;
la = strlen(A);
lb = strlen(B);
lc = strlen(C);
for (int i = 0; i <= la - lb; i++) {
//最终确定下来的i就是A中B的首字母开始的index
//i最大 对应着B在A的最末尾出现 注意取等
int same = 0;
for (int j = 0; j < lb; j++) {
if (A[i + j] == B[j])
same++;
} //试探A从i开始的子串与B相同的位数为same
if (same == lb) { //那么这一轮找到的i就是B开始的index
if (lb > lc) { //如果B比C长
for (int j = 0; j < lc; j++)
A[i + j] = C[j];
//把A中从i开始的lc个字符换成C
for (int j = i; j < la - lb; j++)
A[j + lc] = A[j + lb];
/*把原来A中从i+lb开始的余下(总共la-lb-i个)字符
放到现在A中从i+lc开始的位置*/
A[la + lc - lb] = '\0';
}
else { //如果B比C短 或者一样 就先保存A的后一段
/*A的前i个字符是第一段 序号从i到i+lb-1的lb个字符是要被替换的
* A的最后一段在原来的A中对应i+lb到la-1的(la-lb-i)个字符
* 在新的A中,这一段起始字符的index为i+lc,终止为la-lb+lc-1
* 这里一定要逆着操作!否则会有数值污染
*/
for (int j = la - lb - 1; j >= i ; j--)
A[j + lc] = A[j + lb];
A[la - lb + lc] = '\0';
for (int j = 0; j < lc; j++)
A[i + j] = C[j];
//把C放到从i开始的lc个位置上
}
return 1;
}
} //如果找不到B,就把C连在A后面
for (int i = 0; i < lc; i++)
A[la + i] = C[i];
A[la + lc] = '\0' ;
return 0;
}
int main()
{
char str1[200], str2[200], str3[200];
int nRes;
gets(str1);
gets(str2);
gets(str3);
nRes = replaceStr(str1, str2, str3);
printf("%d\n", nRes);
printf("%s\n", str1);
return 0;
}