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;
}