/*11.13.8寻找包含字符地址*/
#include
char* get_s(char*, int);
char* string_in(char*, char*);
int main(void)
{
char st1[100];
char st2[100];
char* p;
puts("请输入两个字符:\n");
while (get_s(st1, 100) && gets(st2, 100))
{
p=string_in(st1, st2);
if (p)
printf("找到了%p,%s\n", p, p);
else
printf("没找到\n");
printf("请输入两个字符:\n");
}
}
char* get_s(char* st, int n)
{
char* ret_val;
int i = 0;
ret_val = fgets(st, n, stdin);
if (ret_val)
{
while (st[i] != '\n' && st[i] != '\0')
i++;
if (st[i] == '\n')
st[i] = '\0';
else
while (getchar() != '\n')
continue;
}
return ret_val;
}
char* string_in(char* st1, char* st2)
{
char* p = NULL;
for (int i = 0; i <=strlen(st1); i++)
{
for (int j = 0; j <= strlen(st2); j++)
{
if (*st2 == *st1)
{
p = st2;
break;
}
else {
st2++;
continue;
}
}
st1++;
}
return p;
}
我想实现的是输入两个字符,寻找两个字符中共同含有的字母,并返回字母的地址。
但是代码只能实现当首字母相同的情况,
如果是第二个字母相同则不能返回。
char* string_in(char* st1, char* st2)
{
char* p = NULL;
char* st2_start = st2; // 保存 st2 的初始地址
int count = 0; // 计数器
for (int i = 0; i <= strlen(st1); i++)
{
for (int j = 0; j <= strlen(st2); j++)
{
if (*st2 == *st1)
{
p = st2_start; // 找到匹配的字符,返回 st2 的起始地址
count++;
break;
}
else {
st2++;
continue;
}
}
st1++;
st2 = st2_start; // 回到 st2 的初始地址
if (count == strlen(st2)) // 找到了匹配的字符串
return p;
else
count = 0; // 重置计数器
}
return p;
}