输出最长公共前缀#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 22:40:01 浏览: 75
你的代码有一些问题,可能会导致输出不正确或者出现运行时错误。正确的最长公共前缀代码可以参考下面的实现:
```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` 函数来截取字符串的前缀部分,避免了使用指针操作的问题。
相关问题
#include <iostream> #include <cstring> #include <string> using namespace std; class String { private: char *p; public: // 你的代码在这里 } int main() { String s1, s2; s1.input(); s2.input(); s1.display(); s2.display(); cout << (s1 > s2) << endl; cout << (s1 < s2) << endl; cout << (s1 == s2) << endl; return 0; } 输入 两个不带空格的字符串 输出 按样例要求输出 样例输入 Copy Hello Book 样例输出 Copy Hello Book 1 0 0
下面是实现 String 类的代码:
```c++
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
class String {
private:
char *p;
public:
String() { // 构造函数
p = NULL;
}
~String() { // 析构函数
if (p) {
delete[] p;
}
}
void input() { // 输入字符串
string str;
cin >> str;
p = new char[str.length() + 1];
strcpy(p, str.c_str());
}
void display() { // 输出字符串
cout << p << endl;
}
bool operator>(const String &s) { // 大于运算符
return strcmp(p, s.p) > 0;
}
bool operator<(const String &s) { // 小于运算符
return strcmp(p, s.p) < 0;
}
bool operator==(const String &s) { // 等于运算符
return strcmp(p, s.p) == 0;
}
};
int main() {
String s1, s2;
s1.input();
s2.input();
s1.display();
s2.display();
cout << (s1 > s2) << endl;
cout << (s1 < s2) << endl;
cout << (s1 == s2) << endl;
return 0;
}
```
该程序中,String 类有一个指针成员变量 `p`,它指向一个字符串。构造函数将 `p` 初始化为 `NULL`,析构函数释放 `p` 指向的内存。`input()` 函数从标准输入读入一个字符串,将其存放到 `p` 指向的内存中。`display()` 函数将 `p` 指向的字符串输出到标准输出中。`operator>`, `operator<`, `operator==` 分别重载了大于、小于和等于运算符,它们使用 `strcmp` 函数比较两个字符串的大小关系。在 `main()` 函数中,先创建两个 String 类对象 s1 和 s2,分别调用它们的 `input()` 函数输入字符串,再依次调用它们的 `display()` 函数输出字符串,最后调用它们的比较运算符函数输出比较结果。
用c++补全以下函数: char *ReplaceString(char * str, char * s1, char * s2); 该函数用s2替换str中的s1,函数返回替换后的字符串的指针。完整代码为:#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 *********/ }例如:输入: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 *newstr = new char[strlen(str) + 1];
char *ptr = strstr(str, s1);
if (ptr == NULL) {
strcpy(newstr, str);
return newstr;
}
int len1 = strlen(s1);
int len2 = strlen(s2);
int len = ptr - str;
strncpy(newstr, str, len);
newstr[len] = '\0';
strcat(newstr, s2);
strcat(newstr, ptr + len1);
char *tmp = ReplaceString(newstr + len + len2, s1, s2);
strcat(newstr, tmp);
delete[] tmp;
return newstr;
}
```
思路说明:
1. 首先定义一个 `ReplaceString` 函数,输入参数包括待替换的字符串 `str` 和两个字符串 `s1` 和 `s2`。
2. 在函数中,使用 `strstr` 函数查找 `str` 中第一个出现 `s1` 的位置,并将其指针保存在 `ptr` 中。
3. 如果找不到 `s1`,则直接将 `str` 复制到新字符串 `newstr` 中,并返回。
4. 否则,先将 `ptr` 前面的字符串复制到 `newstr` 中,并在 `newstr` 后面添加 `s2`。
5. 再递归调用 `ReplaceString` 函数,将 `newstr` 中 `ptr` 后面的字符串传入,直到找不到 `s1` 为止。
6. 最后将递归得到的字符串拼接到 `newstr` 后面,并返回 `newstr`。
7. 在主函数中,调用 `ReplaceString` 函数进行替换,并输出结果。注意,需要使用 `delete[]` 释放 `newstr` 的内存空间。
阅读全文