用c语言顺序表实现读取文件字符串,并修改保存字符串,实现字符串的输出,查找,插入,删除,替换,拼接,求其子串的功能
时间: 2024-11-22 21:47:22 浏览: 28
在C语言中,可以使用顺序表(数组或链表)来实现文件操作、字符串处理功能。这里我们以动态数组(动态分配内存的数组)为例,因为动态数组更适合存储字符串,它支持动态增长。
1. **读取文件并存入字符串**:
使用`fopen`打开文件,然后通过`fgets`逐行读取文件内容到动态数组中,直到遇到换行符。
```c
char* read_file(const char* filename) {
FILE *file = fopen(filename, "r");
if (file == NULL) return NULL;
int size = 0;
char* str = malloc(1); // 预留空间
while (fgets(str + size, sizeof(char)*sizeof(str), file)) {
size++;
}
str[size] = '\0'; // 结束符
fclose(file);
str = realloc(str, size + 1); // 动态调整大小
return str;
}
```
2. **修改字符串**:
可以直接访问数组元素修改字符串。
```c
void modify_string(char* str, int index, char new_char) {
str[index] = new_char;
}
```
3. **字符串输出**:
通过循环遍历数组打印每个字符。
```c
void print_string(const char* str) {
for (int i = 0; str[i] != '\0'; i++) {
printf("%c", str[i]);
}
printf("\n");
}
```
4. **查找,插入,删除,替换功能**:
- 查找:遍历数组查找指定字符。
- 插入:在指定位置添加新字符,需要先将后面的字符后移。
- 删除:删除指定位置的字符,将后面的字符前移。
- 替换:类似插入,找到目标位置后替换字符。
5. **拼接字符串**:
将两个字符串连接在一起,创建一个新的字符串,然后复制数据。
```c
char* concat_strings(const char* str1, const char* str2) {
int len1 = strlen(str1);
int len2 = strlen(str2);
char* result = malloc(len1 + len2 + 1);
strcpy(result, str1);
strcat(result, str2);
return result;
}
6. **子串求解**:
使用循环和比较判断某个子串是否存在于原字符串中。
```c
int find_substring(const char* main_str, const char* sub_str) {
int pos = 0;
while ((pos = strstr(main_str, sub_str)) != NULL) {
// 找到子串,返回位置
return pos - main_str;
}
// 没有找到,返回 -1 或其他表示不存在的值
return -1;
}
```
阅读全文