函数应该首先判断substr是否出现在str中,如果它并未出现,函数返回值为0;如果出现,函数返回值为1;用c语言
时间: 2024-09-24 21:17:38 浏览: 42
在C语言中,你可以使用`strstr()`函数来检测一个字符串(substr)是否存在于另一个字符串(str)中。以下是一个简单的函数实现:
```c
#include <string.h> // 引入字符串处理函数库
int checkSubstring(char* str, char* substr) {
if (str == NULL || substr == NULL) { // 检查输入是否为空
return 0; // 如果有任何空指针,返回0
}
size_t len_sub = strlen(substr); // 获取子串长度
size_t pos = strstr(str, substr); // 查找子串在主串中的位置
// 如果找到子串,函数返回1;未找到则返回0
if (pos != NULL) {
return 1;
} else {
return 0;
}
}
```
在这个函数中,`strstr()`查找子串在主串中的位置,并返回指向该子串的第一个字符的指针。如果找不到子串,则返回`NULL`。我们通过判断`pos`是否为`NULL`来确定子串是否存在。
相关问题
5. 编写一个参数为指针的函数,判断一个字符串在另一个字符串中是否存在,如果存在,则返回该字符串出现的次数;如果不存在,则返回值为0。编写主函数,对其功能测试。
在C++中,你可以编写如下的函数来完成这个任务:
```cpp
#include <iostream>
#include <string>
// 定义函数,接受两个指向字符串的指针作为参数
int findSubstring(const char* str1, const char* str2) {
int count = 0;
while (str1 != nullptr && *str1 != '\0') { // 遍历str1
size_t index = str2.find(*str1); // 查找str2中第一个匹配项
if (index != std::string::npos) { // 如果找到
// 更新位置并检查是否超出边界
str1 += 1; // 移动到下一个字符
str2.erase(0, index + 1); // 移除已匹配部分
count++;
} else {
break; // 没有找到,跳出循环
}
}
return count;
}
int main() {
std::string str1 = "Hello, world!";
std::string substr1 = "world";
std::cout << "Substring '" << substr1 << "' appears " << findSubstring(str1.c_str(), substr1.c_str()) << " times in '"
<< str1 << "'.\n";
// 对其他情况做测试
std::string str2 = "This is a test.";
std::string substr2 = "test";
std::cout << "Substring '" << substr2 << "' appears " << findSubstring(str2.c_str(), substr2.c_str()) << " times in '"
<< str2 << "'.\n";
return 0;
}
```
这个`findSubstring`函数首先遍历`str1`,对于每个字符,它查找`str2`中是否有相同的字符,并计算出现的次数。注意我们使用了`std::string::npos`来表示未找到的情况。
在`main`函数中,我们对一些示例字符串进行了测试。
用C语言设计一个函数,如果T不包含在S中,则返回字符串T在字符串S或-1中最后一次出现的位置。使用指针指向字符串的每个字符。
在C语言中,你可以设计一个名为`last_occurrence`的函数,它接受两个指向字符数组的指针作为参数,代表待查找的字符串T和包含它的字符串S。以下是函数的一个简单实现:
```c
#include <stdio.h>
#include <string.h>
// 函数声明,返回值类型为int
int last_occurrence(char* str, char* substr) {
int index = -1; // 初始化查找结果为-1,表示未找到
int i = 0, j = 0;
// 遍历主串str
while (str[i]) {
// 如果找到子串substr的起始位置
if (str[i] == substr[j]) {
i++; // 移动到下一个字符
j++; // 移动到子串中的下一个字符
// 当子串结束或者找到了子串,更新最后一次出现的位置
if (j == strlen(substr)) {
index = i - 1;
break; // 已经找到了整个子串,退出循环
}
} else {
// 子串不在当前位置,回溯并检查下一个子串的可能性
i = i - j + 1;
j = 0; // 从头开始再次匹配
}
}
return index;
}
int main() {
char str[] = "Hello, world!";
char substr[] = "world";
printf("Last occurrence of '%s' in '%s': %d\n", substr, str, last_occurrence(str, substr));
return 0;
}
```
阅读全文