从C++中的函数返回字符串

Returning a string from a function in C++

本文关键字:返回 字符串 函数 C++      更新时间:2023-10-16

我有一段代码,要从姓氏字符串中生成引用代码。它应该取第一个char,无论是否为元音,然后搜索数组中剩余的每个char,丢弃仅在临时string中存储辅音的元音,然后将临时string返回给string refCode;。代码是用C给我的,我将其转换为C++。编译的代码正确地分配了第一个值,但如果if返回true,则在尝试将第二个值分配给临时string时将失败。代码超过5个外部.cpp秒和4个.h秒,所以我将从最少量开始,并根据需要发布更多。

Protytpe:

string makeRefCode(string lastname, int cNo);

呼叫:

refCode = makeRefCode(e[c].lastname, cNo); cout << refCode;//Prints nothing

功能定义:

string makeRefCode(string lastname, int cNo)
{
    string tStr;
    unsigned int i, j = 1;
    unsigned int x;
    x = lastname.length();
    tStr[0] = lastname[0];
    cout << tStr[0];//Prints correct value
    for (i = 1; i < x; i++)
    {
        if (!isVowel(toupper(lastname[i])))
        {
            //tStr[j] = lastname[i];//
            j++;
        }
    }
    //refCode[j] = '0'; // add string terminator
    return tStr;
}
bool isVowel(char aChar)
{
    switch (aChar) //<ctype>
    {
        case 'A':
        case 'E': 
        case 'I': 
        case 'O':
        case 'U': return true; break;
        default: return false;
    }
}

当我试图解决这个问题时,我遇到了断言、访问冲突和一个字符串错误,似乎是在说字符串不够大。如有任何帮助,我们将不胜感激。

字符串的大小不会自动增长。如果字符串的起始长度为零(如tStr),则需要使用push_back在字符串末尾添加字符。

tStr.push_back(lastname[0]);

tStr.push_back(lastname[i]);

将单个字符分配给字符串时,请确保该字符串已分配了这些字符。

以下代码错误:

string tStr;
//...
tStr[0] = lastname[0];

因为,它会为tStr中的第一个字符指定一个值。但此时tStr为空。

您想要附加/推回字符:

string tStr;
//...
tStr.push_back( lastname[0] );

此外,您应该确保姓氏不为空。

不能在空字符串上说tStr[0]!当然,目标字符串必须足够大才能包含结果。说tStr.push_back(lastname[0]);tStr += lastname[0];,或者初始化足够大的字符串(就像std::string tStr(lastname.size())一样),然后在完成后截断它。

您需要添加对0长度的检查:

if (x==0) ....

您需要将命令代码tStr[j] = ...替换为:

tStr.push_back(lastname[i]);