我编写的程序涉及一个将2个字符串作为输入的函数。该函数应返回指向str1中str2出现的指针(如果存在),如果不存在则返回NULL。如果在str1中找到,该函数应基本返回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;
}
答案 0 :(得分:1)
您的strstr变体不会返回指向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;
}
答案 1 :(得分:0)
尝试使用所有0来初始化newstr,如下所示:
char *newstring = new char[len2];
for (int i = 0; i < len2; i++) {
newstring[i] = '0';
}
(newstr默认情况下应该用0来初始化,但我对此并不十分肯定,所以我只是发布了这个循环,因为我并不是100%)
然后,在循环结束时,如果newstring在第一个索引处仍然包含0,则返回
nullptr
。