我编写了以下代码,以查找str1
中是否存在str2
。但它并不适用于所有场景。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int i,j,flag=1;
char str1[]="goa",str2[]="gogoa";
if (strlen(str1)>strlen(str2))
{
printf("not found");
return;
}
for ( i = 0; str2[i]; i++)
{
if (str1[0]==str2[i])
{
for ( j = 0; str1[j]; j++)
{
if (str1[j]!=str2[i+j])
{
printf("not found");
flag=0;
}
}
break;
}
}
if (flag==1)
{
printf("found at index %d ",i);
}
getchar();
}
在str1
中多次出现str2
起始字符时无法正常工作,否则效果正常。
如何优化它以使其在所有情况下都能正常工作?
答案 0 :(得分:1)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
int i, j, flag=0, len1, len2;
char str1[]="goa",str2[]="gogoa";
len1 = strlen(str1);
len2 = strlen(str2);
if (len1 > len2){
printf("not found");
return 0;
}
for (i = 0; i <= len2 - len1; ++i){
if (str1[0]==str2[i]){
flag = 1;
for (j = 1; str1[j]; ++j){
if (str1[j]!=str2[i+j]){
flag=0;
break;
}
}
if(flag==1)
break;
}
}
if (flag==1){
printf("found at index %d ",i);
} else {
printf("not found");
}
return 0;
}
答案 1 :(得分:0)
试试这个:
int i,j,flag=0, match=0;
char str1[]="goa",str2[]="gogoa";
if (strlen(str1)>strlen(str2))
{
printf("not found");
return;
}
for ( i = 0; str2[i]; i++)
{
if (str1[0]==str2[i])
{
match=1;
for ( j = 0; str1[j]; j++)
{
if (str1[j]!=str2[i+j])
match=0;
}
if(match == 1)
{
flag = 1;
break;
}
}
}
if (flag==1)
printf("found at index %d ",i);
else
printf("not found");
答案 2 :(得分:0)
我同意你应该表明你做了什么。请下次再这样做。
目前,我想建议两种方法来调试粘滞问题:使用printfs并了解流程或使用gdb。我已经评论了你的程序w.r.t. printf方法。没有测试过所有的情况......但是这应该会给你一个调试方向。希望能帮助到你。在下次发布问题之前,请记住执行此步骤: - )
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main()
{
int i,j,flag=1;
char str1[]="goa",str2[]="gogoa";
if (strlen(str1)>strlen(str2)) {
printf("not found");
return;
}
for ( i = 0; str2[i]; i++) {
/* If starting letter does not match, forget it */
if (str1[0]==str2[i]) {
flag = 1;
// Iterate thro' str1
for ( j = 0; str1[j]; j++) {
if (str1[j] != str2[i+j]) {
printf("%s not found at index %d of %s\n", str1, i, str2);
flag=0;
break; // out of inner for loop
}
}
if (j == strlen(str1)) {
// found the entire string.
break; // out of outer for loop
}
}
}
if (flag==1) {
printf("%s found at index %d of %s\n", str1, i, str2);
}
getchar();
}
答案 3 :(得分:0)
我已经重新编写了代码并略微修改了它,它对我有用, 检查所有必要的方案,并告诉我。
public static bool findString(string searchText, string fullText)
{
bool result = false;
if (searchText.Length > fullText.Length)
{
return false;
}
for (int i = 0; i <= (fullText.Length - searchText.Length); i++)
{
if (searchText[0] == fullText[i])
{
for (int j=0; j<searchText.Length ;j++)
{
if ((i+j)< fullText.Length && searchText[j] == fullText[i+j])
result = true;
else
{
result = false;
break;
}
}
}
if (result)
{
Console.WriteLine("found at index {0}", i);
break;
}
}
return result;
}
对语法很抱歉,我只有c#可用。你必须使用strlen(string)作为长度,'%d'作为'{0}',printf作为Console.Writeline(“”);
答案 4 :(得分:0)
#include <string.h>
if(strstr(str2, str1) != NULL) {
/* ... */
}
请查看strstr函数的文档。
答案 5 :(得分:-1)
//Declaration: char *strstr(const char *str1, const char *str2);
//Return: It returns a null pointer if no match is found.
#include <string.h>
#include <stdio.h>
int main(void)
{
char *p;
p = strstr("goa", "gogoa");
printf(p);
return 0;
}