【发布时间】:2019-06-23 01:31:26
【问题描述】:
我正在尝试检查输入字符串是字母数字还是更大写或为空。如果输入字符串在上述出现故障的字符串中,我只想返回 false/0 否则可以与运行正常的程序的其余部分一起工作。我的程序块有问题:
std::string myfunc(std::string input){
std::string b="";
if (!input.size()) return 0;
for (int i = 0; i < input.size(); i++){
if ( input[i] < 'a' || input[i] > 'z'|| isalpha(input[i]) || isupper(input[i]) ) return 0;
}
b = input;
//just copy the input string for now.
return b;
}
我把这个函数称为
int main(){
std::string input="Somthing";
std::cout << myfunc(input)<< std::endl;
return 0;
}
得到以下错误?
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_M_construct null not valid
Aborted (core dumped)
这个程序在没有这两种极端情况的情况下运行良好。我无法理解错误并找到解决方法?关于我做错了什么有什么建议吗?
【问题讨论】:
-
问题是
return 0; -
同样通过
const&传递字符串。 -
当函数返回一个字符串或什么都不返回时,也许你想返回一个
std::optional -
是的,我一直在寻找这种类型,因为我想返回两个,正常情况下的字符串,但如果收到故障字符串,则返回整数!
-
你总是在里面换吗?你改变它是什么意思?
const&更好,如果您可能并不总是需要更改或退回它。
标签: c++