在C语言中实现串连接,把两个串首尾相连。 2、求子串。将串S从第pos个字符开始,长度为len的字符序列复制到串sub中,pos位置需合法; 3、串比较。 4、实现BF算法,写出匹配过程。
时间: 2024-10-24 14:03:00 浏览: 35
在C语言中,实现字符串连接通常可以使用库函数`strcat()`,它会将目标字符串追加到源字符串的末尾。如果需要手动操作内存,可以使用动态内存分配和指针:
1. **串连接** (strcat示例):
```c
#include <stdio.h>
#include <string.h>
void str_concat(char* dest, char* src) {
if(dest == NULL) { // 检查dest是否已初始化
dest = src; // 如果未初始化,直接指向src
} else {
while(*dest != '\0') { // 将dest的所有字符都移动一位
dest++;
}
}
strcpy(dest, src); // 写入src的内容
}
int main() {
char str1[50], str2[50];
// 填充字符串...
str_concat(str1, str2);
printf("Concatenated string: %s\n", str1);
return 0;
}
```
2. **求子串** (substring extraction):
```c
void substr(char* str, int pos, int len, char* sub) {
if(pos >= 0 && pos + len <= strlen(str)) { // 检查索引合法性
strncpy(sub, str + pos, len); // 复制指定长度的字符
sub[len] = '\0'; // 结束符
} else {
printf("Invalid substring index.\n");
}
}
int main() {
char S[] = "Hello, World!";
int pos = 7, len = 6;
char sub[20];
substr(S, pos, len, sub);
printf("Substring: %s\n", sub);
return 0;
}
```
3. **串比较** (strcmp示例):
```c
int compare_strings(const char* s1, const char* s2) {
return strcmp(s1, s2); // 如果相等返回0,非零表示有区别
}
int main() {
char str1[] = "apple";
char str2[] = "banana";
if(compare_strings(str1, str2) == 0) {
printf("Strings are equal.\n");
} else {
printf("Strings are different.\n");
}
return 0;
}
```
4. **实现BF算法 - 括号匹配** (使用栈实现Brute Force Matching for parentheses):
```c
#include <stdbool.h>
#include <stdio.h>
#define MAX_PAREN 100
bool is_balanced(char* expr, int open_parens[], int max_parens) {
int count = 0, i = 0;
bool visited[max_parens + 1] = {false};
open_parens[0] = -1;
while(expr[i]) {
if(expr[i] == '(') {
if(count < max_parens)
open_parens[count++] = i;
} else if(expr[i] == ')') {
if(count > 0 && !visited[count - 1]) {
visited[count - 1] = true;
count--;
} else {
return false;
}
}
i++;
}
return count == 0;
}
int main() {
char expr[] = "((()))";
int open_parens[MAX_PARENS];
if(is_balanced(expr, open_parens, MAX_PAREN))
printf("Balanced.\n");
else
printf("Not balanced.\n");
return 0;
}
```
阅读全文