用C++编写一个程序
用C++编写一个程序,用于接受两个字符串,判断第一个字符串中是否包含第二个字符串,如果包含说明第二个字符串在第一个字符串中的位置(即,第二个字符串在第一个字符串中出现的位...
用C++编写一个程序,用于接受两个字符串,判断第一个字符串中是否包含第二个字符串,如果包含说明第二个字符串在第一个字符串中的位置(即,第二个字符串在第一个字符串中出现的位置)。
编不好,希望高人指点!谢谢! 展开
编不好,希望高人指点!谢谢! 展开
5个回答
展开全部
呵呵!
其实这个很简单哦!主要用到的是两个字符串的匹配算法哦!
不过楼主要谨记:程序要靠自己写哦
呵呵!完整的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;
}
以上程序仅供参考哦!
其实这个很简单哦!主要用到的是两个字符串的匹配算法哦!
不过楼主要谨记:程序要靠自己写哦
呵呵!完整的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;
}
以上程序仅供参考哦!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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,那么返回第一个位置。
如果是控制台程序那就要花些功夫了
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,那么返回第一个位置。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
主要的算法
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;
}
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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
性能最佳的话,需要用KMP算法了,那个很麻烦的,看书把。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询