字符串的基本操作,包括求串长、赋值、比较、串连接、求子串、替换和定位算法
时间: 2023-12-21 18:06:23 浏览: 72
1. 求串长:可以使用strlen函数来求一个字符串的长度,例如strlen(str)可以求出字符串str的长度。
2. 赋值:可以使用赋值语句将一个字符串赋给另一个字符串变量,例如str1 = str2可以将字符串str2赋给字符串str1。
3. 比较:可以使用比较运算符(如==、!=、>、<、>=、<=)来比较两个字符串的大小关系,例如strcmp(str1, str2)可以比较字符串str1和str2的大小关系。
4. 串连接:可以使用字符串连接运算符(+)或字符串连接函数(如strcat)来将两个字符串连接成一个字符串,例如str1 + str2或strcat(str1, str2)可以将字符串str1和str2连接成一个字符串。
5. 求子串:可以使用字符串截取函数(如substr)来截取一个字符串的一部分,例如substr(str, start, len)可以截取字符串str中从start位置开始长度为len的子串。
6. 替换:可以使用字符串替换函数(如replace)来替换一个字符串中的指定子串,例如replace(str, old_str, new_str)可以将字符串str中的所有old_str子串替换成new_str子串。
7. 定位算法:可以使用字符串定位函数(如find)来定位一个字符串中指定子串的位置,例如find(str, sub_str)可以查找字符串str中第一次出现子串sub_str的位置。
相关问题
编写程序实现字符串的基本操作,包括求串长、赋值、比较、串连接、求子串、替换和定位算法。
您好!感谢使用ChitGPT进行语音交互。对于您的问题,这是一道比较基础的编程题目。以下是我的回答:
1. 求串长:遍历字符串并计数字符数量即可。
2. 赋值:可以直接将一个字符串赋值给另一个字符串变量。
3. 比较:从左到右逐个字符进行比较,若有不同字符则直接返回比较结果,若遍历完所有字符都相同,则返回相等。
4. 串连接:可以使用字符串拼接符号“+”将两个字符串连接起来。
5. 求子串:可以使用字符串的切片方法来获取子串,即通过指定起始和结束的索引值来截取字符串。
6. 替换:使用字符串的replace方法,将某个子串替换为另一个字符串。
7. 定位算法:可以使用字符串的find方法来查找子串在字符串中第一次出现的位置。
以上就是字符串的基本操作。希望对您有帮助。若想了解更多关于编程语言的知识,可以提出具体问题,我会尽力帮助您解答。
编写程序实现字符串的基本操作,包括求串长、赋值、比较、串连接、求子串、替换和定位算法。代码
很高兴能与您交流!以下是一个可以实现字符串基本操作的 C++ 代码示例:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class String {
private:
char* str; // 字符串指针
int len; // 字符串长度
public:
String() { // 默认构造函数
str = new char[1];
str[0] = '\0';
len = 0;
}
String(const char* s) { // 参数为 char* 的构造函数
len = strlen(s);
str = new char[len+1];
strcpy(str, s);
}
String(const String& s) { // 复制构造函数
len = s.len;
str = new char[len+1];
strcpy(str, s.str);
}
~String() { delete []str; } // 析构函数
// 求字符串长度
int length() const { return len; }
// 赋值操作符 =
String& operator=(const char* s) {
if (str != s) {
delete [] str;
len = strlen(s);
str = new char[len+1];
strcpy(str, s);
}
return *this;
}
// 比较操作符 ==
bool operator==(const String& s) const {
return strcmp(str, s.str) == 0;
}
// 连接操作符 +
String operator+(const String& s) const {
String temp;
int totalLen = len + s.len;
temp.str = new char[totalLen+1];
temp.len = totalLen;
strcpy(temp.str, str);
strcat(temp.str, s.str);
return temp;
}
// 求子串函数
String substr(int start, int len) const {
if (start >= 0 && start < this->len) {
char* tempStr = new char[len+1];
strncpy(tempStr, str+start, len);
tempStr[len] = '\0';
String temp(tempStr);
delete [] tempStr;
return temp;
}
else {
return String();
}
}
// 替换函数
String replace(const char* oldStr, const char* newStr) const {
String temp(*this);
size_t pos = temp.str.find(oldStr);
while (pos != string::npos) {
temp.str.replace(pos, strlen(oldStr), newStr);
pos = temp.str.find(oldStr, pos+strlen(newStr)); // 避免死循环
}
return temp;
}
// 定位函数
int index(const String& s, int pos = 0) const {
size_t targetPos = str.find(s.str, pos);
if (targetPos == string::npos) {
return -1;
}
else {
return int(targetPos);
}
}
// 输出函数
friend ostream& operator<<(ostream& out, const String& s) {
out << s.str;
return out;
}
};
int main() {
String str1("Hello");
String str2("world");
String str3("Hello");
cout << "str1: " << str1 << endl;
cout << "str2: " << str2 << endl;
cout << "str1.length(): " << str1.length() << endl;
cout << "str2.length(): " << str2.length() << endl;
cout << "str1 == str2: " << (str1 == str2) << endl;
cout << "str1 == str3: " << (str1 == str3) << endl;
String str4 = str1 + str2;
cout << "str1 + str2: " << str4 << endl;
String str5 = str4.substr(2, 5);
cout << "str4.substr(2, 5): " << str5 << endl;
String str6 = str4.replace("world", "ChitGPT");
cout << "str4.replace(\"world\", \"ChitGPT\"): " << str6 << endl;
cout << "str4.index(str2): " << str4.index(str2) << endl;
cout << "str4.index(\"Lorem\"): " << str4.index("Lorem") << endl;
return 0;
}
```
该代码中包括求串长、赋值、比较、串连接、求子串、替换和定位算法等基本操作。请注意,为了避免内存泄露,需要对每个 new 操作都对应一个 delete 操作。此外,替换函数中使用了 C++11 标准库中的 string 类的相关方法,需要在编译时加上 `-std=c++11` 选项。
阅读全文