1

我想编写一个返回字符串子字符串的函数。

f(what string, from which index, how many chars)

我已经做到了,但使用字符串类,但我想使用 char*,但我不知道如何。您能否更正代码,使其使用 char* 而不是 string*?它在 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;
}
4

4 回答 4

1

我可以纠正它使用stringnot string*

string output(s1, 2, 4);

或者,如果您想要一个功能符合您的规范:

string subString(string s, int index, int n) {
    return s.substr(index, n);
}

使用char*会更尴尬,因为您需要手动分配和释放缓冲区以保留字符串。我建议您不要这样做。

于 2012-08-30T12:02:28.947 回答
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;
}
于 2012-08-30T12:05:10.397 回答
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;
}
于 2012-08-30T12:08:14.813 回答
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;
}
于 2012-08-30T11:56:10.780 回答