在c ++中使用char *的特定字符串的子串

时间:2012-08-30 11:52:09

标签: c++ string char

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

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;
}

4 个答案:

答案 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;
}