- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在为我的类(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
语句中的计数值才能正常工作。如果您不提供任何值,那么它将采用垃圾值,如 4195901
和 if
语句将在 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/
我正在为我的类(class)编写一个程序,该程序将按专辑名称对专辑列表进行排序,然后按字母顺序对专辑歌曲进行排序。我收到错误 'std::out_of_range' what(): basic_str
我是一名优秀的程序员,十分优秀!