又一次发希望有人帮我看看
//输入一个任意位的数,删除其中的任意位,得到的数最小,这些数都是从键盘上输入的,要求用链表做
//如果有其他的方法,可以帮我发一下,编译器怎么一直报错
#include <iostream>
#include <list>
using namespace std ;
int main ()
{
int n, k, i ;
char s ;
list <char> c ;//产生一个空的list
list <char>::iterator pos = c.begin () ;
list <char>::iterator pos1 = c.begin () ;
cout << "请输入位数N:" ;
cin >> n ;
cout << "请输入这个数:" ;
for (i = 0; i < n; i++)
{
cin >> s ;
c.push_back (s) ;
}
cout << "请输入要删除的位数K:" ;
cin >> k ;
for (i = 0; i < k; i++)//删除其中的k位
{
pos1 = pos = c.begin () ;
while ((pos1++) != c.end ()){//检查下一位
if (*pos<= *pos1)
pos ++ ;
else{
pos = c.erase (pos) ;
}
}
c.pop_back () ;//移除最后一个元素
}
for (pos = c.begin (); pos != c.end (); ++pos)
cout << *pos ;
system ("pause") ;
return 0 ;
}
[解决办法]
嗯,你的程序里删除太多数据了。把删除循环改成这样:
for (i = 0; i < k; i++)//删除其中的k位{ pos1 = pos = c.begin () ; while ((++pos1) != c.end ()){//检查下一位 if (*pos<= *pos1) pos ++ ; else{ pos = c.erase (pos) ; break; /*已经删除了就要退出循环,否则会多删*/ } } if (pos1==c.end()) /*因为上面的改变,这里也要相应变更避免多删*/ c.pop_back () ;//移除最后一个元素}