[英]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.