繁体   English   中英

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

[英]Returning a string from a function in C++

我有一些代码可以从一个姓氏字符串中创建参考代码。 它应该获取第一个char无论是否为元音),然后在数组中搜索每个剩余的char ,以仅将元音存储辅音的元音丢弃在临时string ,然后将临时string返回给string refCode; 该代码是用C语言给我的,我将其转换为C ++。 代码会正确地分配第一个值,但是如果if返回true ,则在尝试将第二个值分配给temp 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]);

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

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

以下代码是错误的:

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

因为,它为tStr的第一个字符分配了一个值。 但是, tStr为空。

您要追加/回退字符:

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

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

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

if (x==0) ....

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

tStr.push_back(lastname[i]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM