如何 return 来自函数的 C 字符串并显示它

How to return a C-String from a function and display it

我的程序无法显示整个 C 字符串,它只显示第一个字母!我正在尝试编写一个要求用户输入 2 个 C 字符串的函数。然后我有一个单独的函数来确定哪个 c-sting 按字母顺序更大,另一个要显示。每次它显示 c 字符串时,它只显示第一个字母。我不知道我做错了什么。我需要它来显示整个 C 字符串。

这是向用户询问两个 C 字符串的函数:

const char *getData(char *c, char *d)
{
    cout << "Enter the first c-string: ";
    cin.ignore();
    cin.getline(c, 50);
    cout << "Enter the second c-string: ";
    cin.getline(d, 50);
    return c, d;
}

这是比较 c 字符串的函数

const char findBigger(char *c, char *d)
{
    if (strcmp(c, d) == 0)
        return *c;
    else if (strcmp(c, d) < 0)
        return *c;
    else if (strcmp(c, d) > 0)
        return *d;
}

这里是显示输入和更大的 c 字符串的函数

void displayBigger(const char *c, const char *d, const char *maxChar)
{
    cout << "The first c-string is " << c << endl;
    cout << "The second char is " << d << endl;
    cout << "The bigger value is " << maxChar << endl;
    cout << "__________________________________________" << endl;
}

main()我有

char first[50],
second[50]'
maxArray[50];
getData(first, second);
*maxArray = findBigger(first, second);
displayBigger(*first, *second, *maxArray);

程序的输出是:

Enter the first c-string: apple pie
Enter the second c-string: peach pie
The first char is a
The second char is p
The bigger value is a
__________________________________________

如何让它打印整个 C 字符串?它应该显示“苹果派”和“桃子派”

你的代码有几个问题,尽管没有使用 std::string.

是显而易见的问题

问题 1:

const char findBigger(char *c, char *d)
{
    if (strcmp(c, d) == 0)
        return *c;
    else if (strcmp(c, d) < 0)
        return *c;
    else if (strcmp(c, d) > 0)
        return *d;
}
  1. 这个函数应该returnconst char *,而不是const char
  2. 您不必要地使用同一组参数调用 strcmp 3 次。您只需调用 strcmp 一次并测试该值:

固定代码可能如下所示:

const char* findBigger(const char *c, const char *d)
{
    if ( strcmp(c, d) <= 0 )
        return c;
    return d;
}

请注意参数是 const char *,因为您没有更改 C-strings.

中包含的数据

问题 2:

char first[50],
second[50]'
maxArray[50];
getData(first, second);
*maxArray = findBigger(first, second);
displayBigger(*first, *second, *maxArray);
  1. 调用函数(假设它是main)将maxArray声明为char的数组,但应该声明为const char * ].

  2. displayBigger 的调用应该有指针传递给它。

这里是固定版本:

int main()
{
    char first[50],
    second[50];
    
    getData(first, second);
    const char *maxArray = findBigger(first, second);
    displayBigger(first, second, maxArray);
}

问题 3:

const char *getData(char *c, char *d)
{
    cout << "Enter the first c-string: ";
    cin.ignore();
    cin.getline(c, 50);
    cout << "Enter the second c-string: ";
    cin.getline(d, 50);
    return c, d;
}

getData 不需要 return const char *,因为参数是指向 char 将被填充的缓冲区的指针。然后这一行:

return c, d;

没有 return 两个值,只有 d 由于逗号运算符。这成为一个有争议的问题,因为一旦函数声明为 void.

就没有必要了

固定版本:

void getData(char *c, char *d)
{
    cout << "Enter the first c-string: ";
    cin.ignore();
    cin.getline(c, 50);
    cout << "Enter the second c-string: ";
    cin.getline(d, 50);
}