所以我一直试图过滤我的清单。列表已正确创建并填充,但我从文档中获得了两次条目。它应该是那样的。现在我试图将它们过滤掉,我想我对它有了很好的了解,但是它不能正常工作。
Anmeldung* delete_object(Anmeldung* b){
Anmeldung* tmp = b;
b = b->next;
delete(tmp);
return b;
}
void filter_list(Anmeldung* b){
Anmeldung* tmp = b;
while(b!=NULL){
std::string info = b->Matrikelnummer;
while(tmp!=NULL){
if(tmp->Matrikelnummer == info){
tmp = delete_object(tmp);
}else
tmp = tmp->next;
}
b = b->next;
tmp = b;
}
}
所以我试图遍历我的列表并将每个值与整个列表进行比较。我正在搜索的值是Matrikelnummer
,如果两个人得到相同的Matrikelnummer,则会被删除。
这是我的结构Anmeldung。这是我的教授提供的:
struct Anmeldung {
Anmeldung* next;
std::string Nachname; // Name Teilnehmer
std::string Vorname; // Vorname Teilnehmer
std::string Email; // Email Adresse Teilnehmer
std::string Matrikelnummer; // Matrikelnr. Teilnehmer
std::string Studienrichtung; // Studienrichtung Teilnehmer
std::string Semester; // Studiensemester Teilnehmer
std::string G1name; // Name Wunschkandidat fuer Praktikumsgruppe
std::string G1vorname; // Vorname Wunschkandidat
std::string Anmerkung; // Freier Text
};
我认为while
循环是正确的,delete_object
是错误的,但我看不到在哪里或如何。
我不被允许使用容器列表或类似的东西。我只有结构。所以没有双重链表。
答案 0 :(得分:0)
当您致电<?php
namespace App\Command;
use App\Entity\Foo;
use App\Entity\Bar;
use Doctrine\Common\Persistence\ManagerRegistry;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class RegenerateSlugs extends Command
{
private $doctrine;
public function __construct(ManagerRegistry $doctrine)
{
parent::__construct();
$this->doctrine = $doctrine;
}
protected function configure(): void
{
$this
->setName('app:regenerate-slugs')
->setDescription('Regenerate the slugs for all Foo and Bar entities.')
;
}
protected function execute(InputInterface $input, OutputInterface $output): void
{
$manager = $this->doctrine->getManager();
// Change the next line by your classes
foreach ([Foo::class, Bar::class] as $class) {
foreach ($manager->getRepository($class)->findAll() as $entity) {
$entity->setSlug(null);
//$entity->slug = null; // If you use public properties
}
$manager->flush();
$manager->clear();
$output->writeln("Slugs of \"$class\" updated.");
}
}
}
时,您不会删除正在传递的对象,而是删除链接列表中的 next 条目。因此,您的delete_object()
语句正在找到要删除的正确节点,但之后您将继续之后删除节点。你应该解决这个问题(但是要保留在删除节点之后返回节点的一般想法。)
此外,您的无条件if()
逻辑会导致跳过 tmp = tmp->next
返回的节点(如果已调用)。您应该将该语句放在delete_object()
子句中,因为一旦修复else
,它将返回您想要继续的下一个节点。
答案 1 :(得分:0)
尚未查看详细信息,但在filter_list
Anmeldung* tmp = b;
中有if(tmp->Matrikelnummer == info){
,这意味着strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\default")
Set objItem = objWMIService.Get("SystemRestore")
errResults = objItem.Enable("D:\")
'Inform User that the task is done.
Mybox = MsgBox("System Restore is now enabled on "& strComputer &"" &
vbCRLF ,vbOkOnly,"System Restore Enabled")
始终为真。