我今天开始学习C ++,目前我遇到了一些问题。
我有一个自定义结构,我称之为数据:
struct data{
int x, y, l;
};
它是一个包含3个变量的简单结构。
接下来我运行这个递归函数。尽管如此,它的作用并不重要,因为打印出最终的返回语句会产生正确的结果。
data finds(int x, int y, int length, string s){
//cout << length << endl;
int nx = prev(x, s);
int ny = next(y, s);
if(nx != -1 && ny != -1 && s.at(nx) == s.at(ny)){
finds(nx, ny, length + 2, s);
}
else{
cout << x << y << length << endl;
data vals;
vals.x = x;
vals.y = y;
vals.l = length;
return vals;
}
}
此函数中的cout语句产生
068
这是我想要的数字。但是,当我尝试打印这样的函数的结果时如下:
464078426865241
这显然是错误的。
我的问题是:如何正确返回结构以产生正确的值。
你也可能想要一些可运行的代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct data{
int x, y, l;
};
int next(int i, string s){
//cout << s;
//cout << j;
for(int j = i + 1; j < s.size(); j++){
if(isalnum(s.at(j))){
return j;
}
}
return -1;
}
int prev(int i, string s){
//cout << s;
for(int j = i - 1; j >= 0; j--){
//cout << j;
if(isalnum(s.at(j))){
return j;
}
}
return -1;
}
data finds(int x, int y, int length, string s){
//cout << length << endl;
int nx = prev(x, s);
int ny = next(y, s);
if(nx != -1 && ny != -1 && s.at(nx) == s.at(ny)){
finds(nx, ny, length + 2, s);
}
else{
cout << x << y << length << endl;
data vals;
vals.x = x;
vals.y = y;
vals.l = length;
return vals;
}
}
int main(){
s = "1233321";
data val;
val = finds(3, 3, 2, s);
cout << val.x << val.y << val.l;
}
答案 0 :(得分:1)
您忘记返回执行递归的函数:
return finds(nx, ny, length + 2, s);
^^^^
否则不会导致未定义的行为。