用C++编写一个程序

用C++编写一个程序,用于接受两个字符串,判断第一个字符串中是否包含第二个字符串,如果包含说明第二个字符串在第一个字符串中的位置(即,第二个字符串在第一个字符串中出现的位... 用C++编写一个程序,用于接受两个字符串,判断第一个字符串中是否包含第二个字符串,如果包含说明第二个字符串在第一个字符串中的位置(即,第二个字符串在第一个字符串中出现的位置)。
编不好,希望高人指点!谢谢!
展开
 我来答
touchmicrosoft
2006-11-03 · TA获得超过283个赞
知道小有建树答主
回答量:129
采纳率:50%
帮助的人:126万
展开全部
呵呵!
其实这个很简单哦!主要用到的是两个字符串的匹配算法哦!
不过楼主要谨记:程序要靠自己写哦

呵呵!完整的C++算法如下
#include <iostream.h>
#define max 100
struct str
{
char val[max];
}
str s1,s2;

int StrIndex(str *s1,str *s2)
{
int i,j,k;
for (i=0;s1->val[i];i++)
for(j=i,k=0;s1->val[j]==s2->val[k];j++,k++)
if(s2->val[k])
return -1;
return i;
}

}
void main()
{
int make;
char temp[max];
cout<<"请输入字符一:";
cin>>temp;
s1->val=temp;
cout<<"请输入字符二:";
cin>>temp;
s2->val=temp;
make=StrIndex(s1,s2);
if(make==-1)
cout<<"字符串不相等!";
cout<<"第二个字符串在第一个字符串中的位置为:"<<i;

}
以上程序仅供参考哦!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_KQL_
2006-10-30 · 超过59用户采纳过TA的回答
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:143万
展开全部
MFC 的话采用CString类CString.Find()很简单。

如果是控制台程序那就要花些功夫了
class CString
{
public:
CString();
CString(char *);
int Len();

int Find(CString strDec);

private:
char *pString;
int m_nLenght;
};

CString::CString()
{
}

CString::CString(char *str1)
{
int lenght = 0;

while(str1[lenght] !='\0')
{
lenght ++;
}

pString = new char[lenght + 1];
m_nLenght = lenght;
for(int i = 0;i < m_nLenght;i++)
{
pString[i] = str1[i];
}

pString[m_nLenght] = '\0';
}

int CString::Len()
{
return m_nLenght;
}

int CString::Find(CString strDec)
{
for(int i = 0;i < m_nLenght;i++){
if(pString[i] == strDec.pString[0]){
bool bFind = true;
for(int j =0 ;j < strDec.Len();j++){
if(pString[i+j] != strDec.pString[j]){
bFind = false;
}
}
if(bFind) return i+1;
}
}

return -1;
}

void main()
{
CString s1("zhang"),s2("an");

cout<< s1.Find(s2)<<endl;
}

返回值:-1没有找到,其他是找到第一个匹配的位置,如果字符串1包含多个字符串2,那么返回第一个位置。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lj_snowy
2006-10-30 · 超过12用户采纳过TA的回答
知道答主
回答量:22
采纳率:0%
帮助的人:33.1万
展开全部
主要的算法

int Index(STRING s1,STRING s2)
{
len1=Length(s1); len2=Length(s2); //计算s1和s2的长度
i=0; j=0; //设置两个扫描指针
while (i<len1&&j<len2) {
if (s1.str[i]==s2.str[j]) { i++; j++; }
else {i=i-j+1; j=0;} //对应字符不相等时,重新比较
}
if (j==len2) return i-len2+1;
else return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
simhks
2006-10-30 · TA获得超过1615个赞
知道小有建树答主
回答量:1410
采纳率:0%
帮助的人:547万
展开全部
string str1( "Alpha Beta Gamma Delta" );
string::size_type loc = str1.find( "Omega", 0 );
if( loc != string::npos )
cout << "Found Omega at " << loc << endl;
else
cout << "Didn't find Omega" << endl;

http://www.cppreference.com/cppstring/find.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
or_fox
2006-11-09 · TA获得超过234个赞
知道小有建树答主
回答量:121
采纳率:0%
帮助的人:87.4万
展开全部
性能最佳的话,需要用KMP算法了,那个很麻烦的,看书把。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式