我想写一个返回字符串子串的函数。
f(what string, from which index, how many chars)
我已经完成了但是使用字符串类,但我想使用char *,但我不知道如何。你可以请更正代码,以便它使用char *而不是字符串*?它在c ++中令人困惑。
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
//index - starting at, n- how many chars
string* subString(string s, int index, int n){
string* newString = new string("");
for(int i = index; i < s.length() && i < n + index; i++)
*newString += s.at(i);
return newString;
}
int main()
{ string s1 = "Alice has a cat";
string* output = subString(s1, 2, 4);
cout<<(*output)<<endl;
system("pause");
return 0;
}
答案 0 :(得分:1)
我可以更正它以使用string
而不是string*
:
string output(s1, 2, 4);
或者如果您想要符合规范的功能:
string subString(string s, int index, int n) {
return s.substr(index, n);
}
使用char*
会更加尴尬,因为您需要手动分配和释放缓冲区以保持字符串。我建议您不要这样做。
答案 1 :(得分:1)
#include <string.h>
char *subString(const char *s, int index, int n) {
char *res = (char*)malloc(n + 1);
if (res) {
strncpy(res, s + index, n + 1);
}
return res;
}
答案 2 :(得分:1)
#include <iostream>
#include <stdio.h>
using namespace std;
//index - starting at, n- how many chars
char* subString(char *s, int index, int n){
char *res = new char[n + 1];
sprintf(res, "%.*s", n, s + index);
return res;
}
int main()
{
char* s1 = "Alice has a cat";
char* output = subString(s1, 2, 4);
cout << output << endl;
system("pause");
delete[] output;
return 0;
}
答案 3 :(得分:0)
我认为你就是这样做的。 (尚未测试过)。这会在失败时返回null,但您可以轻松地将其修改为使用异常。
char* subString(string s, int index, int n){
if (s.length() < (n+index)) {return null;}
char* newString = new (nothrow) char[n+1];
if (newString){
for(int i = 0; i < n; i++)
{newString[i] = s.at(i + index);}
newString[n] = '\0';
}
return newString;
}