永发信息网

C++寻找字符串子串位置

答案:4  悬赏:80  手机版
解决时间 2021-03-11 16:04
  • 提问者网友:蔚蓝的太阳
  • 2021-03-10 15:22
题目:
给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置。

#include<iostream>
#include<string>
using namespace std;

int main()
{
int n, m;
char str1[10], str2[10];
cin >> str1 >> str2;
for (n = 0; n < 10; n++)
{
for (m = 0; m < 10; m++)
{
if (str1[n] = str2[m])
{
cout << n << endl;
break;
}
}
}
return 0;
}

我想的是一个一个字符的比,先从str1[0]开始和str2里的字符比较,相等则输出n的值,break跳出循环
可是发现结果和想的不一样啊?哪里出了问题,应该怎么改?
最佳答案
  • 五星知识达人网友:何以畏孤独
  • 2021-03-10 16:50
你这个程序有个小问题是 if (str1[n] = str2[m]) 应该改成 if (str1[n] == str2[m]),一个等于号是赋值,两个才是比较。


剩下的就是算法问题了。
应该将第二个循环里面改成:
 if (str2[m] == '\0')
   {// '\0'代表最后一个字符,运行到这说明str2的所有字符都匹配了
     cout << "match found at " << n << endl;
     break;
   }
 if (str1[n+m] != str2[m])
   {// 有一个不一样就不用再比下去了
     break;
   }
全部回答
  • 1楼网友:北方的南先生
  • 2021-03-10 19:14
为什么不用string? #include<iostream> using namespace std; int main() {     string s1 = "1234567890",s2 = "90", s3 = "87";     string::size_type f1 = s1.find(s2), f2 = s1.find(s3);     if(f1 == string::npos)       cout<<"f1 No Find"<<endl;      else        cout<<"f1 at "<<f1<<endl;     if(f2 == string::npos)       cout<<"f2 No Find"<<endl;     else       cout<<"f2 at "<<f2<<endl;       return 0;  }
  • 2楼网友:野味小生
  • 2021-03-10 18:50

#include <iostream> //找字符串的直接后继 #include <string> #include <math.h> #include <conio.h> using namespace std;

int main() {     char a[100];         int n,i,j,k,t,m=0,w;     char temp;

    if(scanf("%s",a))     {     n=strlen(a);     if(n==1)     {     cout<<a[0]<<" -> no successor"<<endl;     }     else     {     printf("%s -> ",a);     for(i=n-1;i>0;i--)     {     if(a[i-1]<a[i])     {     m=1;     w=a[i-1];     break;     }     }

    if(m==0)     {     cout<<"no successor"<<endl;     }

    if(m==1) //把从第n-1到第i个元素中第一个比第i-1个大的元素放在第i-1位置上,最后对第i到第n元素升序排列     {     for(t=n-1;t>i-1;t--)     if(a[t]>w)     {     int temp=a[i-1];     a[i-1]=a[t];     a[t]=temp;     break;     }     k=n-1; //冒泡排序     int lastexchange;     while(k>i)     {          for(j=i;j<k;j++)     if(a[j]>a[j+1])     {     int temp=a[j];     a[j]=a[j+1];     a[j+1]=temp;     lastexchange=j;     }          k=lastexchange;     }     for(int i=0;i<n;i++)     cout<< a[i];     cout<<endl;         }         getch();     return 0;     } } }

  • 3楼网友:荒野風
  • 2021-03-10 17:33
按照题目 应该是string1.indexof(string2) ,非要自己写的话就是从string1的i=0开始取string2.length长的字符串和string2比较字符串,不相等则i++ 都不想等返回-1 相等了返回i
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯