首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

又一次发希望有人帮小弟我看看

2012-04-25 
又一次发希望有人帮我看看//输入一个任意位的数,删除其中的任意位,得到的数最小,这些数都是从键盘上输入的

又一次发希望有人帮我看看
//输入一个任意位的数,删除其中的任意位,得到的数最小,这些数都是从键盘上输入的,要求用链表做
//如果有其他的方法,可以帮我发一下,编译器怎么一直报错
#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 ;
}

[解决办法]
嗯,你的程序里删除太多数据了。把删除循环改成这样:

C/C++ code
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 () ;//移除最后一个元素} 

热点排行