【发布时间】:2017-04-11 00:30:53
【问题描述】:
我打算编写一个函数,使字符串的第一个和最后一个字母保持相同,并忽略最后一个字母之后的任何非字母。我应该使用 std::random_shuffle()。我阅读了文档,但是我似乎没有掌握此功能的概念。这是我的代码:
#include <iostream>
#include <algorithm>
#include <string>
std::string mix(std::string s){
int last_char;
if(std::isalpha(s[s.size()-1]) == true){
last_char = s.size()-1;
} else {
for(int i=s.size()-1 ; i>0; --i){
if((std::isalpha(s[i]) == false) && (std::isalpha(s[i-1])==true)){
last_char = i -1;
break;
}
}
}
std::random_shuffle(&s[1],&s[last_char]);
return s;
}
int main(){
std::string test = "Hello";
std::cout << mix(test) << std::endl;
}
编辑:但是现在我不断收到错误:分段错误(核心转储)。有人知道为什么吗?似乎找不到问题。
【问题讨论】:
-
它随机打乱你提供的参数之间的内容
-
您需要学习如何使用调试器。同时回答这些问题:last_letter 的最终值是多少?分配在哪一行?