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
8 Lösung(en)
s='1232n4jkrbhj4brj4h3278837rbdhjdb5563nnbmnb3333mnb444m4mm6m7m8m'
print("".join([i if i.isnumeric() else ' ' for i in s]).split())
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)
#include <stdio.h>
int main() {
char str[] ="1232n4jkrbhj4brj4h3278837rbdhjdb5563nnbmnb3333mnb444m4mm6m7m8m";
char cmp[] = "abcdefghijklmnopqrstuvwxyz";
char *tmp;
printf ("numbers in string:\n", str);
tmp = strtok (str, cmp);
while (tmp != NULL) {
printf ("%s\n", tmp);
tmp = strtok (NULL, cmp);
}
}
Lösung von: Jens Kelm (@JKooP)
Verifikation/Checksumme:
[1232, 4, 4, 4, 3278837, 5563, 3333, 444, 4, 6, 7, 8]
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung: