使用c在另一个字符串中查找一个字符串
我编写了以下代码,以查找使用c在另一个字符串中查找一个字符串,c,algorithm,C,Algorithm,我编写了以下代码,以查找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)) {
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();
}
#包括
#包括
#包括
int main()
{
int i,j,flag=1;
字符str1[]=“goa”,str2[]=“gogoa”;
如果(strlen(str1)>strlen(str2))
{
printf(“未找到”);
返回;
}
对于(i=0;str2[i];i++)
{
if(str1[0]==str2[i])
{
对于(j=0;str1[j];j++)
{
if(str1[j]!=str2[i+j])
{
printf(“未找到”);
flag=0;
}
}
打破
}
}
如果(标志==1)
{
printf(“在索引%d处找到”,i);
}
getchar();
}
当str1
起始字符在str2
中多次出现时,它不工作,否则它工作正常。
我如何优化它以使其在所有情况下都能工作?尝试以下方法:
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");
//声明:char*strstrstr(const char*str1,const char*str2);
//Return:如果找不到匹配项,则返回空指针。
#包括
#包括
内部主(空)
{
char*p;
p=strstr(“goa”、“gogoa”);
printf(p);
返回0;
}
我同意关于你应该展示你所做的事情的评论。请下次再做
现在,我想建议两种方法来调试出棘手的问题:使用printfs并理解流程或使用gdb。我已经评论了你的程序w.r.t.的printf方法。还没有测试所有的案例…但这应该能给你一个调试的方向。希望能有帮助。下次发布问题之前,请记住执行此步骤:-)
#包括
#包括
#包括
main()
{
int i,j,flag=1;
字符str1[]=“goa”,str2[]=“gogoa”;
如果(strlen(str1)>strlen(str2)){
printf(“未找到”);
返回;
}
对于(i=0;str2[i];i++){
/*如果起始字母不匹配,请忘记它*/
if(str1[0]==str2[i]){
flag=1;
//通过str1进行迭代
对于(j=0;str1[j];j++){
if(str1[j]!=str2[i+j]){
printf(“%s未在%s的索引%d处找到,\n”,str1,i,str2);
flag=0;
break;//超出内部for循环
}
}
如果(j==strlen(str1)){
//找到了整个字符串。
中断;//外部for循环中断
}
}
}
如果(标志==1){
printf(“%s在%s的索引%d处找到,\n”,str1,i,str2);
}
getchar();
}
#包括
#包括
#包括
int main(){
int i,j,flag=0,len1,len2;
字符str1[]=“goa”,str2[]=“gogoa”;
len1=strlen(str1);
len2=strlen(str2);
如果(len1>len2){
printf(“未找到”);
返回0;
}
对于(i=0;i我已经重写了代码,只做了一些轻微的修改,它对我有效,
检查所有必要的情况,并让我知道
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;
}
publicstaticboolfindstring(stringsearchtext,stringfulltext)
{
布尔结果=假;
if(searchText.Length>fullText.Length)
{
返回false;
}
对于(int i=0;i#包括
if(strstr(str2,str1)!=NULL){
/* ... */
}
请签出函数文档。请搜索堆栈溢出,这个问题已经被问过很多次了…使用strstrstr库函数而不是编写自己的函数。您可以使用strstrstr
使其工作不是一个“优化”,而是一个修复方法!另外,请向我们展示您为找到问题所在所做的努力。
#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();
}
#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;
}
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;
}
#include <string.h>
if(strstr(str2, str1) != NULL) {
/* ... */
}