C: Wie kann ich ein Pointer-Array anlegen, um die Fundstellen zu speichern?

/* 24_02 dynamische Speicherverwaltung
   demonstriert realloc
   ZUR BEACHTUNG: Dies ist ein reines Demo-Programm!
                  Speicher-Reallokation in 10-Byte-Blöcken ist in der Praxis nicht sinnvoll!
                  Speicherallokation und insbesondere Speicher-Reallokation kosten erhebliche System-Resourcen!
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define STRLEN 10

int Such(char* strPtr, char* Ptr2);

int main()
{
  int n = 1;
  char* strPtr = (char*)malloc(n * STRLEN); // kleinen Speicherblock anfordern
  char* strPtr2 = (char*)malloc(n * STRLEN); // kleinen Speicherblock anfordern
  printf("Bitte Text eingeben: \n");
  fgets(strPtr, STRLEN, stdin); // einlesen
  printf("\n");

  while (strPtr[strlen(strPtr) - 1] != '\n') // Ende erreicht, letztes Zeichen '\n'?
  {
    n++; // Anzahl Blöcke inkrementieren
    strPtr = (char*)realloc(strPtr, n * STRLEN); // größeren Speicher anfordern: n Blöcke
    fgets(strPtr + strlen(strPtr), STRLEN + 1, stdin); // weiter einlesen, terminierende 0 überschreiben, STRLEN + 1 Byte stehen zur Verfügung
  }

  printf("Nach welcher Zeichenfolge soll gesucht werden?\n");
  fgets(strPtr2, STRLEN, stdin); // einlesen
  printf("\n");

  while (strPtr2[strlen(strPtr2) - 1] != '\n') // Ende erreicht, letztes Zeichen '\n'?
  {
    n++; // Anzahl Blöcke inkrementieren
    strPtr2 = (char*)realloc(strPtr2, n * STRLEN); // größeren Speicher anfordern: n Blöcke
    fgets(strPtr2 + strlen(strPtr2), STRLEN + 1, stdin); // weiter einlesen, terminierende 0 überschreiben, STRLEN + 1 Byte stehen zur Verfügung
  }

  printf("Zeichenfolge wurde %i mal gefunden\n", Such(strPtr, strPtr2));
  return 0;
}

int Such(char* strPtr, char* strPtr2)
{
  int n = 0;
  int p = 0;
  int sip = 0;

  int ltext = strlen(strPtr) - 1;
  int lzfolge = strlen(strPtr2) - 1;
  int lgteilt = ltext / lzfolge;
  char* ptrarr[] = { NULL };

  while ((lgteilt) > 0)
  {
    for (int i = 0; i < lzfolge; i++)
    {
      if (strPtr[p] == strPtr2[i])
      {
        sip++;
      }

      p++;
    }

    lgteilt--;
  }

  return (sip / lzfolge);
}

Ich verstehe leider nicht ganz, wie man ein Pointer-Array anlegen soll, um die Fundstellen zu speichern.

Ich habe zwar eine Schleife, aber diese kann z. B. "yay" nicht mit "ay" vergleichen.

Danke für die Hilfe.

Bild zum Beitrag
Computer, Technik, programmieren, Technologie, C (Programmiersprache)
Excel Zeiten erfassen?

Hallo zusammen,

ich habe folgende Problem in Excel. Ich möchte einen gewissen Zeitraum aus Stundenaufzeichnungen in Tag- und Nachtzeit unterscheiden.

Dabei geht die Tagzeit von 06:00 - 20:00 Uhr und die Nachtzeit von 21:59 - 05:59 Uhr.

In B4 steht die Uhrzeit des Arbeitsbeginn und in C4 das Ende. Diese sind in Format Uhrzeit formatiert. Die entsprechenden Zahlenformate zu der Uhrzeit sind in AB4 (Beginn) und AC4 (Ende).

Nun möchte ich, wenn die Arbeitszeit z.b. von 04:00 Uhr - 23:00 Uhr geht, dass entsprechend richtig die Stundenanzahl in Tag und Nacht unterschieden wird. Die Uhrzeit kann auch tagesübergreifend sein z.B. 19:00 - 07:00 Uhr. dabei ist jede erdenkliche Möglichkeit innerhalb eines Tages (24 Stunden) möglich.

Beispiel:
Bei der Arbeitszeit von 19:00 - 07:00 Uhr sind 2 Tagstunden (19:00-20:00 + 06:00 - 07:00) und 10 Nachtstunden (20:00 - 00:00 + 00:00 - 06:00).

fehlerhafte Formel für die Tageszeit als Zahl in Zelle Z4:

=WENN(ODER(D4<>"A";AB4="";AC4="");0;WENN(UND(AC4<=AB4;AC4>=Adm!$F$7);(Adm!$F$8-B4)+(C4-Adm!$F$7);WENN(UND(AB4>=6;AC4<=20);(C4-B4);WENN(UND(AB4>=6;AC4>=20);Adm!$F$8-B4;WENN(UND(AB4<=6;AC4<=20);C4-Adm!$F$7;WENN(UND(AB4<=6;AC4>=20);Adm!$F$8-Adm!$F$7;WENN(AC4<AB4;WENN(UND(AC4<AB4;AC4<=6);(Adm!$F$8-B4);""))))))))

fehlerhafte Formel für die Nachtzeit als Zahl in Zelle AA4:

=WENN(ODER(D4<>"A";B4="";C4="");0;WENN(UND(AB4<6;AC4>20);(Adm!$F$7-B4)+(C4-Adm!$F$8);WENN(AB4<6;Adm!$F$7-B4;WENN(AC4>20;C4-Adm!$F$8;0))))

In der Zelle: "Adm!$F$7" steht als Uhrzeit formatiert 06:00 und "Adm!$F$8" steht die Uhrzeiten 20:00 Uhr.

Vielleicht hat jemand eine Idee und kann die Formeln korrigieren oder hat entsprechend einen besseren/richtigen Ansatz. Problem bei der ganzen Sache ist einfach, das hier auch Tagesübergreifend gearbeitet wird und entsprechend das Ende "kleiner" ist als der Anfang. Ich habe die Vermutung, dass mit "+1" gearbeitet werden muss, aber bin da leider raus.

Gruß

Bild zum Beitrag
Computer, Microsoft, Microsoft Excel, programmieren
While-Schleife in Python sich wiederholen lassen, bis der Nutzer gewinnt und 'n' eingibt?

Hi! Ich schreibe in Python gerade ein kleines Zahlen-Rate-Spiel. Dabei soll der Nutzer eine Zahl zwischen 1 und 10 erraten und wenn er das erfolgreich getan hat, soll er gefragt werden, ob er noch einmal spielen möchte. D.h. die While-Schleife soll so lange wiederholt werden, bis der User gewinnt und nicht mehr weiterspielen möchte, also 'n' eingibt. Dann soll ganz am Ende einfach nur noch ausgegeben werden: "Thanks for playing! Press Enter to exit."

Wie kann ich das realisieren bzw. was muss ich an meinem jetzigen Code noch ändern? Momentan funktioniert es nämlich nicht.

import random

print("Welcome to the number guessing game!")
manual_yes_no = input("Do you want to read the manual? 'y' for yes, 'n' for playing: ")

if manual_yes_no == 'y':
    print("""------------------------------------------------------
----------------------MANUAL--------------------------
------------------------------------------------------
A number between 1 and 10 is generated. You have to 
guess the number by typing it. The program says if
your number is lower or higher than the generated
number. Have fun!
------------------------------------------------------
------------------------------------------------------
------------------------------------------------------""")

def guessing():
    _var_secretnumber = random.randint(1, 10)
    _var_usernumber = 0
    _again_var = 'j'

    while _var_usernumber != _var_secretnumber:
        try:
            _var_usernumber = int(input("Your number: "))

            if _var_usernumber < _var_secretnumber:
                print("Higher!")

            if _var_usernumber > _var_secretnumber:
                print("Lower!!")

            if _var_usernumber == _var_secretnumber:
                print("Congrats! You won.")
                _again_var = input("Play again? Type 'y' for yes or 'n' for no: ")
        except ValueError:
            print("Wrong data type! Try a new number!")


try:
    while True:
        guessing()
except KeyboardInterrupt:
    pass
PC, Computer, Software, programmieren, Code, Console, Python
Problem mit C# Debugging in Visual Studio 2019?

Ich habe mit dem Programmieren angefangen und starte erste Programme zu schreiben. Allerdings kommt mir immer, wenn ich das Debugging starten will, diese Meldung

"Visual Studio kann das Debuggen nicht starten, weil das Debugziel "C:\Users\49151\source\repos\AI THIS TIME AI THIS TIME\bin\Debug\AI THIS TIME.exe" nicht vorhanden ist. Erstellen Sie das Projekt, und wiederholen Sie den Vorgang, oder legen Sie die OutputPath- und die AssemblyName-Eigenschaft auf den richtigen Speicherort für die Zielassembly fest."

zu Gesicht. Das obere mit der .exe-Datei habe ich versucht, allerdings erfolglos.

PS.: Ich will nach diesen ((56) HOW TO MAKE VOICE ASSISTANT IN C# (PART 1) - YouTube)-Tutorial einen kleinen Personal Assistent schreiben. Hier ist mein Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Speech;
using System.Speech.Recognition;
using System.Speech.Synthesis;
using System.IO;

namespace AI_THIS_TIME
{
  public partial class Form1 : Form
  {
    SpeechRecognitionEngine recEngine = new SpeechRecognitionEngine();

    SpeechSynthesizer speech = new SpeechSynthesizer();

    public Form1()
    {
      InitializeComponent();

      Choices choices = Choices();
      string[] text = File.ReadAllLines(Environment.CurrentDirectory + "//gramer.txt");
      choices.Add(text);
      Grammar grammar = new Grammar(new GrammarBuilder(choices));
      recEngine.LoadGrammar(grammar);
      recEngine.SetInputToDefaultAudioDevice();
      recEngine.RecognizeAsync(RecognizeMode.Multiple);
      recEngine.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recEngne_SpeechRecognized);
      speech.SelectVoiceByHints(VoiceGender.Female);
    }

    private Choices Choices()
    {
      throw new NotImplementedException();
    }

    private void recEngne_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {
      string result = e.Result.Text;

      if (result == "Hello")
      {
        result = "Hello, I am me how can i help you";
      }

      speech.SpeakAsync(result);
      label2.Text = result;

    private void Form1_Load(object sender, EventArgs e)
    {
    }
  }
}
}
Computer, Schule, programmieren, Visual Studio

Meistgelesene Beiträge zum Thema Programmieren