C++ 从返回指针的函数返回null

C++ 从返回指针的函数返回null,c++,function,pointers,null,return,C++,Function,Pointers,Null,Return,我正在编写一个程序,其中包含一个函数,该函数将2个字符串作为输入。如果str1中存在str2,则函数应返回指向该str2的指针;如果不存在,则必须返回NULL。如果在str1中找到str2,则函数基本上应返回该str2。代码可以工作,但我不知道如果newstring没有元素,如何从函数返回NULL。如果未分配新闻字符串,请提供有关如何返回NULL的任何指导,谢谢 #include<iostream> using namespace std; template <class T&

我正在编写一个程序,其中包含一个函数,该函数将2个字符串作为输入。如果str1中存在str2,则函数应返回指向该str2的指针;如果不存在,则必须返回NULL。如果在str1中找到str2,则函数基本上应返回该str2。代码可以工作,但我不知道如果newstring没有元素,如何从函数返回NULL。如果未分配新闻字符串,请提供有关如何返回NULL的任何指导,谢谢

#include<iostream>
using namespace std;
template <class T>
int lenstr(T str1)      // Function that finds length of a string , instead of using the strlen or sizeof functions.
                        // this function will work for all data types and not just char.
{
    int count = 0;
    while(str1[count] != '\0')
    {
        count++;
    }
    return count;
}
char* mystrstr(char *str1 , const char* str2)
{
    int len1 = lenstr(str1);
    int len2 = lenstr(str2);
    char *newstring = new char[len2];
    int i = 0;
        for (int j = 0;j<len1;j++)
        {
            if(str1[j] == str2[i])
            {
                newstring[i] = str1[j];
                i++;
            }
            else
            {
            i = 0;
            }
        }
        return newstring;
}
void main()
{
    char str1[28] = {"this is a test program"};
    char str2[15] = {"tes"};
    int len2 = lenstr(str2);
    char* returnstring;
    returnstring = mystrstr(str1,str2);
    for(int i = 0;i<len2;i++)
    {
    cout<<returnstring[i];
    }
    cout<<endl;

    delete returnstring;

}
#包括
使用名称空间std;
模板
int lenstr(T str1)//查找字符串长度的函数,而不是使用strlen或sizeof函数。
//此函数适用于所有数据类型,而不仅仅是字符。
{
整数计数=0;
而(str1[count]!='\0')
{
计数++;
}
返回计数;
}
char*mystrstr(char*str1,const char*str2)
{
int len1=lenstr(str1);
int len2=lenstr(str2);
char*newstring=新字符[len2];
int i=0;

对于(int j=0;j尝试使用所有0初始化newstr,如下所示:

char *newstring = new char[len2];

for (int i = 0; i < len2; i++) {
    newstring[i] = '0';
}
char*newstring=newchar[len2];
对于(int i=0;i
(默认情况下,newstr应该用0s初始化,但我对此不太确定,所以我只是发布了那个循环,因为我不是100%地关注它)

然后,在循环结束时,如果newstring在第一个索引中仍然包含0,则返回
nullptr

您的strstrstr变体不会返回指向str1中str2出现的指针。它只会从str1中获取str2中的相同数量的字母,并返回指向新字符串的指针。 如果你的问题是正确的,这就是你需要的:

char* mystrstr(char *str1 , char* str2)
{
    int len1 = lenstr(str1);
    int len2 = lenstr(str2);
    char *ptr1, *ptr2;
    char *result;

    for(ptr1 = str1, ptr2 = str2; *ptr1; ptr1++)
    {
        if(*ptr2 == 0)
            break;
        if(*ptr1 == *str2)
            result = ptr1;
        if(*ptr1 == *ptr2)
        {
            ptr2++;
        }
        else
        {
            ptr2 = str2;
            result = NULL;
        }
    }
    return result;
}
int main()
{
    char str1[28] = {"this is a test program"};
    char str2[15] = {"tes"};
    int len2 = lenstr(str2);
    char* returnstring;
    returnstring = mystrstr(str1,str2);
    if(returnstring != NULL)
    {
        cout << returnstring;
    }
    else
    {
        cout << "returnstring is NULL" << endl;
    }
    delete returnstring;
}
char*mystrstrstr(char*str1,char*str2)
{
int len1=lenstr(str1);
int len2=lenstr(str2);
字符*ptr1,*ptr2;
字符*结果;
for(ptr1=str1,ptr2=str2;*ptr1;ptr1++)
{
如果(*ptr2==0)
打破
如果(*ptr1==*str2)
结果=ptr1;
如果(*ptr1==*ptr2)
{
ptr2++;
}
其他的
{
ptr2=str2;
结果=空;
}
}
返回结果;
}
int main()
{
char str1[28]={“这是一个测试程序”};
char str2[15]={“tes”};
int len2=lenstr(str2);
char*returnstring;
returnstring=mystrstrstr(str1,str2);
if(returnstring!=NULL)
{

CUT没有“<代码>无效主代码”(/C++)。请使用定义的入口点之一。不确定我理解了:“代码>返回null;< /代码> 2。为什么不使用<代码> null ptr> <代码>如果使用C++ 11?3)为什么不使用<代码> STD::String < /Cuth> 4?)<代码>空隙main < /代码>无效c++。
作为第一个字符串和
“tex”
作为第二个。你的代码失败了。事实上,你的代码不应该调用
new
——几乎可以肯定的是,你应该将指针返回到子字符串开始的第一个字符串中。所有这些都是与你的问题无关的代码的基本问题。@Yakk为什么不应该调用new?我正在定义函数中新闻字符串的大小,使其与str2的大小相同,并具有我在结尾返回的输出。@kareem,因为“如果a是b的子字符串,则返回a的副本”是一个非常愚蠢的函数。返回值不是您描述的“b中a的副本”。