gpt4 book ai didi

c++ - 'std::out_of_range' what(): basic_string::substr: __pos

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:15 25 4
gpt4 key购买 nike

我正在为我的类(class)编写一个程序,该程序将按专辑名称对专辑列表进行排序,然后按字母顺序对专辑歌曲进行排序。我收到错误 'std::out_of_range' what(): basic_string::substr: __pos (which is 4) > this->size() (which is 0)。我的老师有点把这个扔给我们,没有解释太多,所以我被困住了。这是我到目前为止的代码:

#include <iostream>
#include <string>

using namespace std;

struct album
{
string name;
string release;
string genre;
string songs[12];
int count;
};

int main()
{
album albums[4];
for (int an = 0; an < 3; an++)
{
for (int i = 0; i < albums[an].count-1; i++)
{

if (albums[an].songs[i].substr(4) > albums[an].songs[i+1].substr(4))
{
swap (albums[an].songs[i], albums[an].songs[i+1]);
}
}
}

输入数据是包含发行日期、流派和歌曲的专辑列表:

Walk, Don't Run 
Released 1960
Genre Instrumental rock, Surf
1. Morgen
2. Raunchy
3. Home
4. My Own True Love (Tara's Theme)
5. The Switch
6. Walk, Don't Run
7. Night Train
8. No Trespassing
9. Caravan
10. Sleepwalk
11. The McCoy
12. Honky Tonk
==================================
Another Smash!!!
Released 1961
Genre Surf rock
1. (Ghost) Riders in the Sky (2:28)
2. Wheels (1:55)
3. Lonely Heart (2:10)
4. Bulldog (2:20)
5. Lullaby of the Leaves (1:58)
6. Beyond the Reef (3:05)
7. Raw-Hide (2:29)
8. Meet Mister Callahan (2:20)
9. Trambone (2:04)
10. Last Date (2:13)
11. Ginchy (1:40)
12. Josie (2:04)
==================================
The Ventures Play Telstar and the Lonely Bull
Released 1963
Genre Surf rock
1. Telstar (2:37)
2. The Lonely Bull (2:11)
3. Mexico (2:26)
4. Calcutta (2:20)
5. Apache (3:08)
6. Never on Sunday (2:14)
7. Tequila (2:44)
8. Green Onions (2:05)
9. Percolator (2:14)
10. Red River Rock (2:15)
11. Let There Be Drums (2:20)
12. Last Night (2:29)
==================================
Hawaii Five-O
Released 1969
Genre Instrumental
1. Hawaii Five-O (1:59)
2. Lovin' Things (2:31)
3. Galveston (2:40)
4. The Letter (2:10)
5. Don't Give in to Him (2:12)
6. Theme from A Summer Place (2:16)
7. Medley: Spooky/Traces/Stormy (4:25)
8. Medley: Aquarius/Let the Sunshine In (2:49)
9. Games People Play (2:46)
10. I Can Hear Music (2:37)
11. Dizzy (2:31)

最佳答案

此处的问题出在您的 substr() 调用上。看起来您正在传递大于字符串长度的 substr() 参数(要作为子字符串复制的第一个字符的位置)。

如果此参数大于字符串长度,它只会抛出您在代码中遇到的out_of_range.异常。

为避免这种情况,请确保将有效值传递给 substr() 调用。

此外,在执行此排序/交换操作之前,您应该先接受输入数据,否则程序可能会在抛出异常后终止。

例如。您的代码需要 if 语句中的计数值才能正常工作。如果您不提供任何值,那么它将采用垃圾值,如 4195901if 语句将在 i 达到 12 时抛出以下异常(因为 songs 是代码中 12 字符串的数组):

terminate called after throwing an instance of 'std::length_error' what(): basic_string::_S_create Aborted

希望对您有所帮助。

关于c++ - 'std::out_of_range' what(): basic_string::substr: __pos,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27222447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com