输出最长公共前缀#include<iostream> #include<cstring> using namespace std; string func(string s1,string s2) { char *p=s1; int a=strlen(s1)>strlen(s2)?strlen(s1):strlen(s2); for(int i=0;i<a;i++) { if(s1[i]==s2[i]) p++; else break; } return p; } int main() { int n; cin>>n; string s1,s2; cin>>s1>>s2; cout<<func(s1,s2)<<endl; return 0; }
时间: 2024-03-18 17:40:01 浏览: 90
你的代码有一些问题,可能会导致输出不正确或者出现运行时错误。正确的最长公共前缀代码可以参考下面的实现:
```cpp
#include <iostream>
#include <string>
using namespace std;
string longestCommonPrefix(string s1, string s2) {
int i = 0;
while (i < s1.length() && i < s2.length() && s1[i] == s2[i]) {
i++;
}
return s1.substr(0, i);
}
int main() {
string s1, s2;
cin >> s1 >> s2;
cout << longestCommonPrefix(s1, s2) << endl;
return 0;
}
```
这里使用了 `substr` 函数来截取字符串的前缀部分,避免了使用指针操作的问题。
相关问题
用c++补全以下程序:#include <iostream> #include <cstring> using namespace std; char ReplaceString(char str, char s1, char s2); int main() { char str[100], s1[10], s2[10]; cin >> str >> s1 >> s2; char result = ReplaceString(str, s1, s2); cout << result << endl; return 0 ; } char ReplaceString(char str, char s1, char s2) { / Begin / / End *********/ }要求ReplaceString函数能够用s2替换str中的s1,并返回替换后的字符串的指针。例如:当输入:abcxxdexxf xx ooo时,程序应当输出:abcooodeooof
以下是完整的程序:
```c++
#include <iostream>
#include <cstring>
using namespace std;
char* ReplaceString(char* str, char* s1, char* s2);
int main() {
char str[100], s1[10], s2[10];
cin >> str >> s1 >> s2;
char* result = ReplaceString(str, s1, s2);
cout << result << endl;
delete[] result; // 记得释放内存
return 0;
}
char* ReplaceString(char* str, char* s1, char* s2) {
char* result = new char[100];
int len1 = strlen(s1);
int len2 = strlen(s2);
int len = strlen(str);
int j = 0;
for (int i = 0; i < len; i++) {
if (strncmp(str + i, s1, len1) == 0) {
strncpy(result + j, s2, len2);
j += len2;
i += len1 - 1;
}
else {
result[j++] = str[i];
}
}
result[j] = '\0';
return result;
}
```
程序中的`ReplaceString`函数利用`strncmp`函数比较`s1`和`str`中的子串是否相同,如果相同就用`strncpy`函数将`s2`替换到`result`中,否则将`str`中的字符复制到`result`中。最后记得在`main`函数中释放`result`的内存。
#include <iostream> #include <cstring> using namespace std; char *ReplaceString(char *str, char *s1, char *s2); int main() { char str[100], s1[10], s2[10]; cin >> str >> s1 >> s2; char *result = ReplaceString(str, s1, s2); cout << result << endl; return 0 ; } char *ReplaceString(char *str, char *s1, char *s2) { /********* Begin *********/ char *t = new char[strlen(str)+1]; // 新建字符数组,用于存储替换后的字符串 char *a = t, *b = s1, *c = s2; // a指向新字符数组的起始位置 while (*str) { char *p = strtok(str,b); if (p!=NULL) { strcpy(a,p); a+=strlen(p); strcpy(a, c); a+=strlen(c); str+= strlen(p)+strlen(b); } else { strcpy(a, str); break; } } return t; }这段代码怎么修改
可以将 char 类型的数组替换为 string 类型,使用 string 的成员函数来进行字符串的操作,避免了潜在的内存越界问题。修改后的代码如下:
```
#include <iostream>
#include <string>
using namespace std;
string ReplaceString(string str, string s1, string s2);
int main() {
string str, s1, s2;
cin >> str >> s1 >> s2;
string result = ReplaceString(str, s1, s2);
cout << result << endl;
return 0;
}
string ReplaceString(string str, string s1, string s2) {
string::size_type pos = 0;
while ((pos = str.find(s1, pos)) != string::npos) {
str.replace(pos, s1.length(), s2);
pos += s2.length();
}
return str;
}
```
这个函数使用了 string::find 函数查找 s1 在 str 中的位置,使用 string::replace 函数进行替换,并且使用 string::npos 来判断查找失败的情况。
阅读全文
相关推荐














