实现顺序串各种基本运算,包括字符串的创建、输出、插入、删除、替换、求子串、字符串的连接等。 要求:不允许使用C++的string库函数。
时间: 2024-11-30 20:14:11 浏览: 73
在不使用C++标准库函数的情况下,我们可以手动实现顺序串(String)的基本操作:
1. **创建字符串**:可以使用字符数组来存储字符串,初始化时指定空字符'\0'作为结束标志。例如:
```c++
char str[50]; // 定义一个长度为50的字符数组
str[0] = '\0'; // 初始化为空字符串
```
2. **输出字符串**:遍历数组并打印每个字符。
```c++
void print_string(char* str) {
for (char c; str != NULL && *str != '\0'; ++str) {
printf("%c", *str);
}
}
```
3. **插入操作**:可以在指定位置插入字符,需要先移动后续字符到右边。
```c++
void insert_char(char* str, int pos, char new_char) {
if (pos < 0 || pos > strlen(str)) return;
memmove(&str[pos + 1], str + pos, strlen(str) - pos); // 移动字符
str[pos] = new_char;
str[strlen(str)] = '\0'; // 更新结尾标志
}
```
4. **删除操作**:移除指定位置的字符,然后调整结尾标志。
```c++
void delete_char(char* str, int pos) {
if (pos < 0 || pos >= strlen(str)) return;
memmove(str + pos, str + pos + 1, strlen(str) - pos); // 移动字符
str[strlen(str) - 1] = '\0'; // 更新结尾标志
}
// 删除某个子串(假设目标子串已知)
void delete_substring(char* str, const char* substr) {
size_t idx = strstr(str, substr) - str;
if (idx == 0) {
delete_char(str, idx);
} else {
delete_char(str, idx);
memmove(str, str + idx + strlen(substr), strlen(str) - idx - strlen(substr));
}
}
```
5. **替换操作**:类似删除操作,只需覆盖目标位置即可。
```c++
void replace_char(char* str, int pos, char new_char) {
if (pos < 0 || pos >= strlen(str)) return;
str[pos] = new_char;
}
// 替换某个子串
void replace_substring(char* str, const char* old_substr, const char* new_substr) {
size_t start_idx = strstr(str, old_substr) - str;
if (start_idx == 0) {
replace_char(str, start_idx, new_substr[0]);
} else {
memmove(str + start_idx + strlen(new_substr), str + start_idx + strlen(old_substr), strlen(str) - start_idx - strlen(old_substr));
memcpy(str + start_idx, new_substr, strlen(new_substr));
}
}
```
6. **求子串**:通过循环查找字符数组来找到子串。
```c++
bool find_substring(const char* str, const char* substr) {
size_t index = 0;
while ((index = strstr(str + index, substr)) != NULL) {
// 找到了匹配
break;
}
return index != NULL;
}
```
7. **字符串连接**:逐个复制源字符串到目标字符串。
```c++
void string_concat(char* dest, const char* src) {
size_t len = strlen(src);
if (dest != NULL) {
memmove(dest + len, dest, strlen(dest)); // 移动原有内容
}
strcpy(dest, src); // 添加新内容
}
```
阅读全文