#include<stdio.h> int find_char(const charstr1,const charstr2)//在字符串str1中找字符串str2的函数 { const charp1=str1;//定义一个指针指向str1 const charp2=str2;//定义一个指针指向str2 int pos=-1;//定义个位置变量,存str2在str1的位置 for(p1=str1;*p1!='\0';p1++) { if(*p1==*p2) { if(pos==-1) { pos=p1-str1; } p2++; if(*p2=='\0') { return pos; } else { p2=str2; if(pos!=-1) { p1=str1+pos; } pos=-1; } } } return -1; } int main() { char str1[100],str2[100]; printf("Input str1:\n"); gets(str1); printf("Input str2:\n"); gets(str2); printf("position=%d\n",find_char(str1,str2)); return 0; }第二个输入字符串,没有正确判断位置
时间: 2024-01-23 10:02:05 浏览: 65
字符串函数string.h应用举例.-综合文档
您的代码存在一个错误,应该将函数声明的参数改为const char *类型,而不是const char类型。此外,您定义指针变量p1和p2时没有指定类型,应该将它们的类型声明为const char*,否则会产生警告或错误。
另外,您在函数内部使用了一个pos变量来记录字符串str2在字符串str1中的位置。但是,如果在查找过程中发现了多个匹配的位置,您只记录了第一个匹配的位置,后面的匹配位置会覆盖掉前面的位置。因此,您需要使用一个数组来记录所有匹配的位置。
最后,您的代码使用了gets函数来读取用户输入的字符串,但是这个函数可能会导致缓冲区溢出的问题,因此建议使用更安全的fgets函数来代替。以下是修改后的代码:
```c
#include <stdio.h>
#include <string.h>
int find_char(const char *str1, const char *str2) {
const char *p1 = str1;
const char *p2 = str2;
int pos[100]; // 保存所有匹配的位置
int count = 0; // 匹配次数
for (; *p1 != '\0'; p1++) {
if (*p1 == *p2) {
if (count == 0) {
pos[count++] = p1 - str1;
}
p2++;
if (*p2 == '\0') {
return pos[0];
} else {
p2 = str2;
if (count > 0) {
p1 = str1 + pos[count - 1];
}
pos[count++] = p1 - str1;
}
}
}
return -1;
}
int main() {
char str1[100], str2[100];
printf("Input str1:\n");
fgets(str1, sizeof(str1), stdin);
str1[strlen(str1) - 1] = '\0'; // 去掉fgets函数读入的换行符
printf("Input str2:\n");
fgets(str2, sizeof(str2), stdin);
str2[strlen(str2) - 1] = '\0';
int position = find_char(str1, str2);
if (position != -1) {
printf("position=%d\n", position);
} else {
printf("str2 not found in str1.\n");
}
return 0;
}
```
在上面的代码中,我们使用了fgets函数来读取用户输入的字符串,并且在读取后去掉了换行符。在find_char函数中,我们使用一个数组pos来保存所有匹配的位置,并使用count变量来记录匹配次数。如果在查找过程中发现了匹配,则将该位置保存到数组中,并将count加1。最后,我们根据pos数组中的第一个位置来判断字符串str2在字符串str1中的位置。
阅读全文