C++编程题,有点不会写,写成了这样运行达不到效果,求高手指导!!

#include <iostream>

using namespace std;
int Search(char *str,char *ch,int *s);
int main()
{
char str[100],ch[100];
int flag,x,s[100];
cout << "请输入字符串:";
cin >>str;
cout <<"请输入查找的字符:";
cin >>ch;
flag=Search(str,ch,s);
if(flag==0)
{
cout <<"找不到该字符!";
}
else
{
cout<<"该字符出现在字符串的第";
for(x=0;x<flag;x++)
{
cout<<s[x]+1<<",";
}
cout<<"的位置.";
}
}
int Search(char *str,char *ch,int *s)
{
int i,j=0,k=0;
int len=strlen(ch);
for(i=0;i<strlen(str);i++)
{
if(str[i]=='\0')
break;
for(;j<len;j++)
{
if(ch[j]=='\0'&&ch[j]==str[j+i])
{
s[k]=i+j;
j+=len-1;
}
else break;
}
}
return j;
}

我写成了这样。。
题目是:
自定义函数,查找字符串中某子串全部出现的位置,返回位置并输出。

我想知道哪里写的不对,要怎么修改,请高手指导QAQ!!

第1个回答  2013-10-15
//自定义函数,查找字符串中某子串全部出现的位置,返回位置并输出,我把你的改了很长时间,最后也没找出什么问题来,逻辑没看懂,不明你理解的思路什么
#include<iostream>
#include<string>
using namespace std;
int search(char *s1,char *s2,int *d);
int main(void)
{
char s1[100],s2[100];
int d[100],i,k;
cin>>s1>>s2;
k=search(s1,s2,d);
cout<<"出现在第 ";
for(i=0;i<k;i++)
cout<<d[i]+1<<',';
cout<<"\b的位置\n";
return 0;
}
/*
int search(char *s1,char *s2,int *d)
{
int i,k;
for(i=k=0;i<=strlen(s1)-strlen(s2);i++)
if(strncmp(s1+i,s2,strlen(s2))==0)
d[k++]=i;
return k;
}
*/
int search(char *s1,char *s2,int *d)
{
int i,j,k;
for(i=k=0;i<=strlen(s1)-strlen(s2);i++)
if(s1[i]==s2[0])
{
for(j=1;j<strlen(s2);j++)
if(s1[i+j]!=s2[j])
break;
if(j==strlen(s2))
d[k++]=i;
}
return k;
}
第2个回答  2013-10-15
赞同,确实没看懂写些什么,写了个简单点的
#include <iostream>
#include<string>
using namespace std;
int main()
{ string str,ch;
int i=0;
cout << "请输入字符串:";
cin >>str;
cout <<"请输入查找的字符:";
cin >>ch;
i=str.find(ch);
if(i==0)
{
cout <<"找不到该字符!";
}
else
{
cout<<"该字符出现在字符串的第"<<i+1<<"的位置.";
}
}
运行结果追问

这个不行的,我们要求用指针和数组做的。

追答

都能用stren这个函数,为什么不能用find

追问

我知道都能,但是我们要求不是这样的。

追答

你要不要尝试下先找第一个相同的字母,然后比较接下来的ch的长度个,自己写一下试下呗,没有时间写

本回答被网友采纳
相似回答