hur.cn - 华软网

 热门搜索

大神帮忙 c++

  作者:未知    来源:网络    更新时间:2011/4/17
 7、编写一个用于在字符串中查找某字符的函数,函数原型声明为:char*mystrchr(char* string, char  c)
     其中参数string为被查找的字符串,c为要查找的字符,前往值为一个指针,它指向字符c在字符串string中第一次出现的位置(#include <iostream.h>
int instr(const char *substr, const char *str)
{
const char *sub,*s;
int count=0;
while (*str!='\0')
{
for(s=str,sub=substr; *s==*sub;s++,sub++)
if(!*(sub+1)) (陌生,帮助注释一下)
count++;
str++;
}
return count;
}
int main()
{
char s1[100],s2[100];
cout<<"请输入源串:";
cin>>s1;
cout<<"输入字符:";
cin>>s2;
cout<<"子串在源串中出现的次数是:"<<instr(s2,s1)<<endl;
return 0;
}如字符串string中不包括字符c,则指针的值为NULL)。
---华软 网友回答---
C++">
int instr(const char *substr, const char *str)
{
  const char *sub,*s;
  int count=0;
  while (*str!='\0')
  {
     for(s=str,sub=substr; *s==*sub;s++,sub++)
       if(!*(sub+1)) //持续是否是字符串的末端处,即下一个字符是否是'\0'
       count++;
     str++;
   }
return count;
}
int main()
{
  char s1[100],s2[100];
  cout<<"请输入源串:";
  cin>>s1;
  cout<<"输入字符:";
  cin>>s2;
  cout<<"子串在源串中出现的次数是:"<<instr(s2,s1)<<endl;
  return 0;
}

---华软网友回复---
谢谢大神
---华软网友回复---
引用 1 楼 huangcheng90 的回复:
C/C++ code

int instr(const char *substr, const char *str)
{
  const char *sub,*s;
  int count=0;
  while (*str!='\0')
  {
     for(s=str,sub=substr; *s==*sub;s++,sub++)
       if(!*(sub+1)) //持续是否是……

欠好意思,错了,是判断你substr是否是为空,即str里边有没有包括sub,  欠好意思..
---华软网友回复---
#include <iostream>
#include<cstring>
using namespace std;
char*mystrchr(char* string, char  c){
 for(unsigned i=0;i<strlen(string);i++){
if(*(string+i)==c){  string=string+i;break; }
else if((i==strlen(string)-1)&&*(string+i)!=c) string= NULL;
else  continue;}
   return string;
}
int main() {
char str1[80],c;
cout<<"Please input the string:"<<endl;
gets(str1);
cout<<"Please input character:"<<endl;
cin>>c;
cout<<mystrchr(str1,c)<<endl;
return 0;}
这个程序问题在那里
---华软网友回复---
它指向字符c在字符串string中第一次出现的位置
你这个位置是指内存地址照旧指  比如"MSDN"中'S'位于第二个位置?
---华软网友回复---
意思应该是第几个位置。。就像迭代器一样!!!!
---华软网友回复---
引用 6 楼 dxy0613 的回复:
意思应该是第几个位置。。就像迭代器一样!!!!

那直接前往for里面的i值不就能够了
---华软网友回复---
引用 4 楼 hupan12 的回复:
#include <iostream>
#include<cstring>
using namespace std;
char*mystrchr(char* string, char  c){
 for(unsigned i=0;i<strlen(string);i++){
if(*(string+i)==c){  string=string+i;break; }
else if((……

代码没有问题,不过你应该这样用
C++">
int main()
{
char str1[80],c;
cout<<"Please input the string:"<<endl;
gets(str1);
cout<<"Please input character:"<<endl;
cin>>c;
cout<<"The Position is: "<<mystrchr(str1,c)-str1<<endl;
getchar();
return 0;
}

char*mystrchr(char* string, char c)
{
for(unsigned i=0;i<strlen(string);i++)
{
if(*(string+i)==c)

  string=string+i;
  break;
}
else if((i==strlen(string)-1)&&*(string+i)!=c)
{
string= NULL;
}
else continue;
}
return string;
}

---华软网友回复---
是指如MSDN"中'S'位于第二个位置
---华软网友回复---
这里需要用到指针啊

---华软网友回复---
优化了一下,先前的代码有缺陷

int main()
{
char str1[80],c;
cout<<"Please input the string:"<<endl;
gets(str1);
cout<<"Please input character:"<<endl;
cin>>c;
char *pPos = mystrchr(str1,c);
if (pPos)
{
cout<<"The Position is: "<<pPos-str1<<endl;
}
else
{
cout<<"The character was not found"<<endl;
}
return 0;
}

char*mystrchr(char* string, char c)
{
for(unsigned i=0;i<strlen(string);i++)
{
if(*(string+i)==c)

  string=string+i;
  break;
}
else if((i==strlen(string)-1)&&*(string+i)!=c)
{
string= NULL;
break;
}
}
return string;
}

---华软网友回复---
#include <iostream>
using namespace std;

class A
{
public:
virtual void f1()
{
cout << "1111" << endl;
};
};

typedef void(*fun)(void);

int main(int, char *[])
{
A a;
fun pfun = NULL;
cout << &a << endl;
cout << (int*)(&a) << endl;            //在这里获得的是对象虚函数表的地址吧?
cout << (int*)(*(int*)(&a)) << endl;                  //在此获得是虚函数表中第一个虚函数的地址吧?
cout << (fun)*((int*)(*(int*)(&a))) << endl;          //问题就在这里:既然(int*)(*(int*)(&a))是函数的地址,那么下一步给函数指针复值的时候应该是(fun)((int*)(*(int*)(&a)))而不是pfun = (fun)*((int*)(*(int*)(&a)))为什么在此还要用*存取呢,虚拟数表中第一项中寄存的就是函数地址,理论上直接加(fun)转一下指针类型就好了啊,这是为什么呢?
pfun = (fun)*((int*)(*(int*)(&a)));
pfun();

system("pause");
};      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。