编写程序实现字符串的基本操作,包括求串长、赋值、比较、串连接、求子串、替换和定位算法。
时间: 2024-01-31 20:02:06 浏览: 124
您好!感谢使用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` 选项。
用c语言编写程序实现字符串的基本操作,包括求串长,赋值,比较,串连接,求子串,替换和定位算法,以及编写程序实现顺序串的简单模式匹配算法
1. 求串长:
```
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
printf("请输入一个字符串:");
scanf("%s", str);
int len = strlen(str);
printf("该字符串的长度为:%d\n", len);
return 0;
}
```
2. 赋值:
```
#include <stdio.h>
#include <string.h>
int main() {
char str1[100], str2[100];
printf("请输入一个字符串:");
scanf("%s", str1);
strcpy(str2, str1);
printf("复制后的字符串为:%s\n", str2);
return 0;
}
```
3. 比较:
```
#include <stdio.h>
#include <string.h>
int main() {
char str1[100], str2[100];
printf("请输入第一个字符串:");
scanf("%s", str1);
printf("请输入第二个字符串:");
scanf("%s", str2);
int result = strcmp(str1, str2);
if (result == 0) {
printf("两个字符串相等\n");
} else if (result < 0) {
printf("第一个字符串小于第二个字符串\n");
} else {
printf("第一个字符串大于第二个字符串\n");
}
return 0;
}
```
4. 串连接:
```
#include <stdio.h>
#include <string.h>
int main() {
char str1[100], str2[100];
printf("请输入第一个字符串:");
scanf("%s", str1);
printf("请输入第二个字符串:");
scanf("%s", str2);
strcat(str1, str2);
printf("连接后的字符串为:%s\n", str1);
return 0;
}
```
5. 求子串:
```
#include <stdio.h>
#include <string.h>
int main() {
char str1[100], str2[100];
printf("请输入一个字符串:");
scanf("%s", str1);
printf("请输入要提取的子串起始位置和长度(用空格隔开):");
int start, len;
scanf("%d %d", &start, &len);
strncpy(str2, str1 + start, len);
printf("提取的子串为:%s\n", str2);
return 0;
}
```
6. 替换:
```
#include <stdio.h>
#include <string.h>
int main() {
char str[100], sub[100], rep[100];
printf("请输入一个字符串:");
scanf("%s", str);
printf("请输入要替换的子串和替换成的新串(用空格隔开):");
scanf("%s %s", sub, rep);
char *pos = strstr(str, sub);
if (pos == NULL) {
printf("未找到要替换的子串\n");
return 0;
}
int len1 = strlen(sub), len2 = strlen(rep);
if (len1 == len2) {
strncpy(pos, rep, len2);
} else if (len1 < len2) {
memmove(pos + len2, pos + len1, strlen(pos + len1) + 1);
strncpy(pos, rep, len2);
} else {
memmove(pos + len2, pos + len1, strlen(pos + len1) + 1);
strncpy(pos, rep, len2);
}
printf("替换后的字符串为:%s\n", str);
return 0;
}
```
7. 定位算法:
```
#include <stdio.h>
#include <string.h>
int main() {
char str[100], sub[100];
printf("请输入一个字符串:");
scanf("%s", str);
printf("请输入要查找的子串:");
scanf("%s", sub);
char *pos = strstr(str, sub);
if (pos != NULL) {
printf("子串在字符串中的位置为:%d\n", pos - str);
} else {
printf("未找到子串\n");
}
return 0;
}
```
8. 顺序串的简单模式匹配算法:
```
#include <stdio.h>
#include <string.h>
int Index(char *s, char *t) {
int i = 0, j = 0;
while (s[i] != '\0' && t[j] != '\0') {
if (s[i] == t[j]) {
i++;
j++;
} else {
i = i - j + 1;
j = 0;
}
}
if (t[j] == '\0') {
return i - j;
} else {
return -1;
}
}
int main() {
char s[100], t[100];
printf("请输入一个字符串:");
scanf("%s", s);
printf("请输入要匹配的模式串:");
scanf("%s", t);
int pos = Index(s, t);
if (pos == -1) {
printf("未找到模式串\n");
} else {
printf("模式串在字符串中的位置为:%d\n", pos);
}
return 0;
}
```
阅读全文