1

我有这个结构:

struct student {
  int id;
  string name;
  string surname;
};

我需要做的是使用这个声明来实现:

char* surname_name (student Student)

这将格式化我输入的每个学生的格式,如“姓,名”,它会带回指针。

到目前为止我所做的是:

char* surname_name (student Student){
    char *pointer= (char*) malloc (sizeof(char)*(Student.name.length + Student.surname.length + 2)); // + 2 because of space and comma

    string::iterator it;
    int i=0;

    for (it= Student.surname.begin(); it != Student.surname.end(); it++){
        (*pointer)[i] = it; // here it gives me error
    }

    ... // here still should be added code for comma, space and name
    return pointer;
}

无论如何我都做不到,因为函数需要有这个声明是在任务中。如何正确地做到这一点?

4

3 回答 3

1
(*pointer)[i] = it;

应该

*(pointer+i) = *it; //assigning the current char to correct position

你也应该i适当增加。

你也可以用std::stringwhich 来做简单的连接。

于 2013-04-08T17:55:51.883 回答
1

这应该可以解决问题:

char * surname_name (student Student){
    return strdup((Student.surname + ", " + Student.name).c_str());
}
于 2013-04-08T17:56:30.383 回答
1

我更喜欢使用std::string::c_str

string surname_name (const student &Student)
{
    return Student.name + " " + Student.surname;
}

// ...

do_something( surname_name(student).c_str() );

 

如果你真的想返回一个指针,你可以这样做:

char *surname_name (const student &Student)
{
    string s = Student.name + " " + Student.surname;
    char *p = new char [s.length()+1];
    strcpy(p, s.c_str());
    return p;
}

不要忘记delete返回的指针。

于 2013-04-08T17:57:35.020 回答