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跳出循环
可是发现结果和想的不一样啊?哪里出了问题,应该怎么改? 展开
给出字符串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;
}
追问
有点不明白,假如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处出现吗?
展开全部
按照题目 应该是string1.indexof(string2) ,非要自己写的话就是从string1的i=0开始取string2.length长的字符串和string2比较字符串,不相等则i++
都不想等返回-1 相等了返回i
都不想等返回-1 相等了返回i
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
为什么不用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的类型的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |