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

题目:给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置。#include<iostream>#include<string>usingnam... 题目:
给出字符串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跳出循环
可是发现结果和想的不一样啊?哪里出了问题,应该怎么改?
展开
 我来答
_iiiiiii
推荐于2017-11-27 · TA获得超过1024个赞
知道小有建树答主
回答量:634
采纳率:75%
帮助的人:195万
展开全部

你这个程序有个小问题是 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;
   }
追问
有点不明白,假如n=1,进入第二个循环,m++,必定会把str2读完,读完就输出n,这时候n++,然后又会输出n=2,那又是怎么判断的?
追答
首先说明啊,这段代码我是测试过的,肯定能用~ 把第二个循环里的内容替换成我这个就可以了。

你可能不太了解break,m++要想一直递增到把str2读完,只可能是因为str1[n] = str[0]且str1[n+1]=str2[1] 且str1[n+2] =str2[2] 且 ... 这些条件只要有一个符号,根据第二个判断,就会调用break,n就++了。而如果都满足的话,不就说明str2在第str1的第n处出现吗?
jqkalytrue
2015-02-14 · TA获得超过835个赞
知道小有建树答主
回答量:1509
采纳率:57%
帮助的人:378万
展开全部
按照题目 应该是string1.indexof(string2) ,非要自己写的话就是从string1的i=0开始取string2.length长的字符串和string2比较字符串,不相等则i++
都不想等返回-1 相等了返回i
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Mirainoe
2015-02-14 · TA获得超过315个赞
知道小有建树答主
回答量:513
采纳率:0%
帮助的人:265万
展开全部

为什么不用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; 
      
}
追问
初学者,没学过string里的函数,你能给我说说什么意思吗
追答
find是string的一个成员函数
xx.find(xxx); 查找xxx在xx里第一次出现的位置,返回string::size_type类型(无符号的)
xx.rfind(xxx); 查找~在...最后一次出现的位置,同上
还有一些
xx.find_first_of(xxx); 查找xxx里任意一个字符在xx里的第一次出现的位置
xx.find_last_of(xxx); 最后一次出现的位置
xx.find_first_not_of(xxx); 在xxx中查找第一个不在xx中的字符
xx.find_last_not_of(xxx); 最后一个不在xx中的字符
还有一个compare函数,你自已研究一下吧
没什么特殊要求就用标准库吧。。是很强大的
如果你题目要求要手写,那就手写,不要用这些
哦,对了若是没找到,就返回npos
npos是定义在stinrg里的,嘛~大小可以装下任何string有可能的大小,是unsigned的类型的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式