1、使用 strchr 函数
利用C标准库中的strchr
函数查找字符。
#include <stdio.h> #include <string.h> // 函数原型 char *find_char(char *str, char c); int main() { char str[] = "Hello, World!"; char c = 'o'; char *result = find_char(str, c); if (result != NULL) { printf("Found '%c' at position: %ld\n", c, result - str); } else { printf("'%c' not found in the string.\n", c); } return 0; } // 函数定义 char *find_char(char *str, char c) { return strchr(str, c); }
2、使用指针和循环
通过遍历字符串中的每一个字符,检查是否与目标字符匹配。
#include <stdio.h> // 函数原型 char *find_char(char *str, char c); int main() { char str[] = "Hello, World!"; char c = 'o'; char *result = find_char(str, c); if (result != NULL) { printf("Found '%c' at position: %ld\n", c, result - str); } else { printf("'%c' not found in the string.\n", c); } return 0; } // 函数定义 char *find_char(char *str, char c) { while (*str != '\0') { if (*str == c) { return str; } str++; } return NULL; }
3、使用指针和递归
使用递归的方式查找字符。
#include <stdio.h> // 函数原型 char *find_char(char *str, char c); int main() { char str[] = "Hello, World!"; char c = 'o'; char *result = find_char(str, c); if (result != NULL) { printf("Found '%c' at position: %ld\n", c, result - str); } else { printf("'%c' not found in the string.\n", c); } return 0; } // 函数定义 char *find_char(char *str, char c) { if (*str == '\0') { return NULL; } if (*str == c) { return str; } return find_char(str + 1, c); }
4、二分查找(适用于已排序字符串)
如果字符串是已排序的,可以使用二分查找来提高查找效率。
#include <stdio.h> #include <string.h> // 函数原型 char *binary_search(char *str, char target); int main() { char str[] = "abcdefg"; char target = 'c'; char *result = binary_search(str, target); if (result != NULL) { printf("Character '%c' found at index %ld.\n", target, result - str); } else { printf("Character '%c' not found in the string.\n", target); } return 0; } // 函数定义 char *binary_search(char *str, char target) { size_t left = 0; size_t right = strlen(str) - 1; while (left <= right) { size_t mid = left + (right - left) / 2; if (str[mid] == target) { return &str[mid]; // 返回找到的字符地址 } else if (str[mid] < target) { left = mid + 1; // 在右半部分继续查找 } else { right = mid - 1; // 在左半部分继续查找 } } return NULL; // 未找到目标字符 }
5、双指针法
使用两个指针,一个指向字符串的开始,一个指向字符串的结束,向中间遍历查找字符。
#include <stdio.h> #include <string.h> char* findCharTwoPointers(char* str, char ch) { char* start = str; char* end = str + strlen(str) - 1; while (start <= end) { if (*start == ch) { return start; } if (*end == ch) { return end; } start++; end--; } return NULL; } int main() { char str[] = "example"; char ch = 'a'; char* result = findCharTwoPointers(str, ch); if (result != NULL) { printf("Character '%c' found at position: %ld\n", ch, result - str); } else { printf("Character '%c' not found\n", ch); } return 0; }