C++寻找字符串子串位置
- 提问者网友:蔚蓝的太阳
- 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 (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
- 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