Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Zahlen aus String herausfiltern (Zeichenketten)

Schreibe ein Programm das aus einem gegebenen String alle Zahlen herausfiltert und in einer Liste speichert. Wobei zusammenhängende Ziffern innerhalb des Strings eine Zahl darstellen. Beispiel: 'a1b2c33' würde die Liste [1,2,33] ergeben.

 

Wie würde die Liste für den String '1232n4jkrbhj4brj4h3278837rbdhjdb5563nnbmnb3333mnb444m4mm6m7m8m' aussehen?

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

7 Lösung(en)

s='1232n4jkrbhj4brj4h3278837rbdhjdb5563nnbmnb3333mnb444m4mm6m7m8m'
Zahlen=[]
zahl=''
for a in s:
        if a.isdigit()==True: zahl+=a
        else:
                Zahlen.append(int(zahl)) if len(zahl)>0 else None
                zahl=''
print(Zahlen)

                

Lösung von: rob ert (tub)

import re
s = "1232n4jkrbhj4brj4h3278837rbdhjdb5563nnbmnb3333mnb444m4mm6m7m8m"
l = [int(x) for x in re.sub(r"[^\d]+", " ", s).split()]
print(l)
                

Lösung von: Name nicht veröffentlicht

function numFilter(str) {
  return str.replace(/\D+/g, ' ').trim().split(' ').map(Number);

}

let string = '1232n4jkrbhj4brj4h3278837rbdhjdb5563nnbmnb3333mnb444m4mm6m7m8m';
console.log(numFilter(string));
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

// NET 6.x | C# 10.x | VS-2022
using static System.Console;
using System.Text.RegularExpressions;

const string str = "1232n4jkrbhj4brj4h3278837rbdhjdb5563nnbmnb3333mnb444m4mm6m7m8m";

// Variante 1 - wie Aufgabenstellung mit Liste als Rückgabewert
WriteLine(string.Join(", ", FilterNums(str)));
static IEnumerable<int> FilterNums(string s) => new Regex(@"\d+").Matches(s).Cast<Match>().Select(x => int.Parse(x.Value));

// Variante 2 - Direktausgabe
WriteLine(string.Join(", ", new Regex(@"\d+").Matches(str)));

// Variante 3 - Direktausgabe oldschool
var n = "";
for (int i = 0; i < str.Length; i++) {
    if (char.IsDigit(str[i])) n += str[i];
    else { if (n.Length > 0) Write(n + " "); n = ""; }
    if (i == str.Length - 1) Write(n);
}
                

Lösung von: Jens Kelm (@JKooP)

// C++ 17
#include <iostream>
#include <vector>
#include <regex>

// Variante 1 - oldschool
std::vector<std::string> filter_nums(std::string str) {
    std::vector<std::string> v{};
    std::string n {};
    for (int i{ 0 }; i < str.length(); i++) {
        if (isdigit(str[i])) n += str[i];
        else { if (n.length() > 0) v.push_back(n); n = ""; }
        if (i == str.length() - 1) v.push_back(n);
    }
    return v;
}

// Variante 2 - Reguläre Ausdrücke
std::vector<std::string> filter_nums_reg(std::string str) {
    std::vector<std::string> v{};
    std::regex reg{ "\\d+" };
    std::sregex_iterator next{ str.begin(), str.end(), reg }, end;
    while (next != end) {
        std::smatch match = *next;
        v.push_back(match.str());
        ++next;
    }
    return v;
}

int main() {
    const std::string str{ "1232n4jkrbhj4brj4h3278837rbdhjdb5563nnbmnb3333mnb444m4mm6m7m8m" };
    const auto fil_reg{ filter_nums_reg(str) };
    for (const auto& f : fil_reg) std::cout << f << " ";
}
                

Lösung von: Jens Kelm (@JKooP)

// NET 6.x | C# 10.x | VS-2022
const string str = "1232n4jkrbhj4brj4h3278837rbdhjdb5563nnbmnb3333mnb444m4mm6m7m8m";

// Variante 4
static string[] FilterNums(string str) => str.Split("abcdefghijklmnopqrstuvwxyz".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(string.Join(", ", FilterNums(str)));
                

Lösung von: Jens Kelm (@JKooP)

' VBA-Funktionen

Public Function FilterNums(str As String) As Variant

    Dim arr() As Variant
    Dim n As String, m As String
    Dim i As Integer, k As Integer
    
    For i = 1 To Len(str)
        m = Mid(str, i, 1)
        If IsNumeric(m) Then
            n = n & m
        Else
            If Len(n) > 0 Then
                k = k + 1
                ReDim Preserve arr(k)
                arr(k) = n
                n = ""
            End If
        End If
        If i = Len(str) Then
            k = k + 1
            ReDim Preserve arr(k)
            arr(k) = n
        End If
    Next i
    
    FilterNums = arr
    
End Function

' Verweis "VBScript RegularExpressions" einbinden
Public Function FilterNumsReg(str As String) As MatchCollection

    Dim col As MatchCollection
    With New RegExp
        .Pattern = "\d+"
        .Global = True
        Set col = .Execute(str)
    End With

    Set FilterNumsReg = col
    
End Function
                

Lösung von: Jens Kelm (@JKooP)

Verifikation/Checksumme:

[1232, 4, 4, 4, 3278837, 5563, 3333, 444, 4, 6, 7, 8]

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 0.25
Schwierigkeit: Leicht
Webcode: 7oxq-yrks
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen