如何在函数中返回const char *?

时间:2014-01-25 15:39:36

标签: c++ function pointers const

我告诉你们我的全部代码。这有点长,所以我最衷心地希望你能得到它:

#include <iostream>
using namespace std;

char const* reverseWordsOnly(const char* s)
{
    int k;
    int p = strlen(s);


    for (int i = 0; i <= p; i++)
    {
        if (s[i] == ' ')
        {

            for (k = i - 1; (k != -1) && (s[k] != ' ') && (s[k] != ',') && (s[k] != ';') && (s[k] != '.'); k--)
                return &s[k];
            return " ";

        }
        if (s[i] == ',')
        {

            for (k = i - 1; (k != -1) && (s[k] != ' ') && (s[k] != ',') && (s[k] != ';') && (s[k] != '.'); k--)
                return &s[k];
            return ",";

        }
        if (s[i] == ';')
        {

            for (k = i - 1; (k != -1) && (s[k] != ' ') && (s[k] != ',') && (s[k] != ';') && (s[k] != '.'); k--)
                return &s[k];
            return ";";

        }
        if (s[i] == '.')
        {

            for (k = i - 1; (k != -1) && (s[k] != ' ') && (s[k] != ',') && (s[k] != ';') && (s[k] != '.'); k--)
                return &s[k];
            return ".";

        }
    }
}

int main()
{
    char s[1002];
    cin.getline(s, 1002, '\n');
    strcat(s, " ");
    reverseWordsOnly(s);
    return 0;
}

那么它做了什么..它颠倒了字母中字母的顺序。例如,如果您记下Something.. terribly wrong.,它应该返回gnihtemoS.. ylbirret gnorw.间隔和点代表分隔符。问题是我必须使用这个非常精确的函数char const* reverseWordsOnly(const char*),我完全不知道如何使它与这些常量和指针一起使用。我编写的代码是完全可编译的,但只返回控制台中的空白区域。我做错了什么?有任何想法吗?如何在函数中返回那些指针值?

2 个答案:

答案 0 :(得分:5)

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

char const* reverseWordsOnly(const char* s){
    static string work;
    work = s;
    string::size_type start_pos = 0, end_pos;

    while(string::npos != (start_pos = work.find_first_not_of(" .,;", start_pos))){
        if(string::npos == (end_pos = work.find_first_of(" .,;", start_pos+1)))
            end_pos = work.length();
        reverse(&work[start_pos], &work[end_pos]);
        start_pos = end_pos + 1;
    }

    return work.c_str();
}

int main(){
    cout << reverseWordsOnly("Something.. terribly wrong.") <<endl;

    return 0;
}

答案 1 :(得分:1)

要么我错过了什么,要么这应该有所帮助:  1.你得到一个const char *,即使你想改变它。 const关键字意味着你不应该改变变量的内容,所以我会摆脱它。  2.看起来你实际上没有改变字符串,即使它是你的函数应该做的(按照你描述的方式)  3.尝试使用strtok函数将句子分成单词。  4.不要在函数中间返回随机字符串 - 写入单词,反转到新缓冲区(使用“new”关键字分配),并将指针返回到结束时的缓冲区你的功能。

如果这还不够,请告诉我,我可以回复一些应该完成这项工作的代码。

此外...您的函数返回char *,但在您的main函数中,您永远不会将其返回值赋给变量。