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

时间:2012-07-30 07:33:29

标签: c++ string

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

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

由于我已经尝试解决这个问题,我得到了断言,访问冲突和字符串错误,似乎它说字符串不够大。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:5)

字符串不会自动增大。如果你的字符串从零开始(如tStr那样),那么你需要使用push_back将字符添加到字符串的末尾。

tStr.push_back(lastname[0]);

tStr.push_back(lastname[i]);

答案 1 :(得分:1)

你不能在空字符串上说tStr[0]!当然,目标字符串必须足够大才能包含结果。要么说tStr.push_back(lastname[0]);tStr += lastname[0];,要么将字符串初始化得足够大(比如std::string tStr(lastname.size())),然后在完成时将其截断。

答案 2 :(得分:1)

为字符串分配单个字符时,请确保字符串已分配这些字符。

以下代码错误:

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

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

你想追加/ push_back字符:

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

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

答案 3 :(得分:1)

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

if (x==0) ....

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

tStr.push_back(lastname[i]);