永发信息网

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

答案:4  悬赏:80  手机版
解决时间 2021-03-11 16:04
题目:
给出字符串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跳出循环
可是发现结果和想的不一样啊?哪里出了问题,应该怎么改?
最佳答案
你这个程序有个小问题是 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;
   }
全部回答
为什么不用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;  }

#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;     } } }

按照题目 应该是string1.indexof(string2) ,非要自己写的话就是从string1的i=0开始取string2.length长的字符串和string2比较字符串,不相等则i++ 都不想等返回-1 相等了返回i
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么前男友都回来找我
()属自行动臂式起重机。
网络公司如何电话营销
海带和紫菜的区别
红跑车咖啡小站在什么地方啊,我要过去处理事
求歌词 就让我爱你 把你搂在我怀里 是出自哪
为什么CAD表格输入小数怎么总是带四位小数?
有关东北地区农业生产和布局的叙述,正确的是
(1十4.8%)的十次方的最终值
证明恒等式:arctanx+arccotx=ㅠ/2 x属于负无
博奥汽车美容中心这个地址在什么地方,我要处
徐善云年龄多大
家鸽子喜欢吃什么食物
sublime3 怎么安装 prefixr
Shall we mee
推荐资讯
故宫又称紫禁城,“紫”和“禁”分别代表什么
漠员是什么意思?
飞羽太阳能热水器的显示器怎么使用
关于施与舍。
金盛金融靠谱么?会不会入金后拿不出来??
有谁开过3D人面公仔店吗?生意还行吗?每天的
诉讼时,剪切的不间断的录音,能作为证据吗
土垚装饰地址在哪,我要去那里办事
河北省邯郸市魏县宅基地确全何时开始
关于亚洲河流的叙述,正确的是AA. 受地势的影
哪家银行的信用卡额度比较大?办理的信用卡是
美借逾期一天还款之后还能借么?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?