• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

znalezienie spacji w string c++

Object Storage Arubacloud
0 głosów
536 wizyt
pytanie zadane 18 lutego 2023 w C i C++ przez Latarnik Użytkownik (650 p.)

Dzień dobry, mam kłopot ze znalezieniem spacji w programie.

Pobieram wyraz w takiej formie string wyraz = "23           sokol czarny"  i w takim wyrazie chciałem oddzielić liczbę  23 a potem wyraz sokol skopiować i nie wiem jak ominąć spację próbowałem w taki sposób tutaj samą liczbę próbowałem wyciągnąć ale nie wychodziło nie liczyło spacji jako r i program szedł dalej. Czy ktoś mógłby pomóc ??

char r = 32;
        for(int q = 0;q<gatunek[i].nazwa_zwyczajowa.size();q++)
        {
            if(gatunek[i].nazwa_zwyczajowa[q] != r )wyraz = wyraz +       gatunek[i].nazwa_zwyczajowa[q];
            if(gatunek[i].nazwa_zwyczajowa[q] == r) break;
        }

 

3 odpowiedzi

+2 głosów
odpowiedź 18 lutego 2023 przez tangarr Mędrzec (154,860 p.)
wybrane 19 lutego 2023 przez Latarnik
 
Najlepsza
Tutaj https://en.cppreference.com/w/cpp/string/basic_string znajdziesz dokumentację klasy string.
Znajdziesz w niej trzyciekawe funkcje: substr, find i find_first_not_of.
Użyj funkcji find do znalezienia pierwszej spacji w tekście. Potem przy pomocy funkcji substr zrób kopię napisu od początku do pierwszej spacji. Później przy pomocy funkcji find_first_not_of znajdź znak który nie jest spacją (szukanie zacznij od spacji znalezionej wsześniej) i na koniec użyj substr aby wyciągnąć resztę napisu.
+1 głos
odpowiedź 18 lutego 2023 przez Great Stary wyjadacz (12,360 p.)
#include <iostream>
#include <string>
#include <sstream>

int main() {
    std::string sentence = "23           sokol czarny";

    int num;
    std::string rest;

    std::istringstream iss(sentence);
    iss >> num >> std::ws;
    std::getline(iss, rest);

    std::cout << "|" << num << "|" << rest << "|\n";
}
0 głosów
odpowiedź 19 lutego 2023 przez VBService Ekspert (253,400 p.)
edycja 19 lutego 2023 przez VBService

Jako ciekawostkę, czasem można też tak, najpierw zapisałem sobie jak rozwiązanie przykładowo mogłoby wyglądać w javascript

[ on-line ]

const a = '23           sokol czarny';
const b = parseInt(a);
const c = a.replace(b, '').trim();
console.log(b, c);

następnie spróbowałem uzyskać podobny zapis (lub funkcjonalność) w c++

[ on-line ]

#include <iostream>
#include <string>

using namespace std;

int main() {
    string a = "23           sokol czarny";
    int b = stoi(a);
    string c = a.substr(to_string(b).length());
    while (c[0] == ' ') c.erase(0, 1);

    cout << b << "|" << c << endl;
    return 0;
}

 

1
komentarz 19 lutego 2023 przez Great Stary wyjadacz (12,360 p.)
while (c[0] == ' ') c.erase(0, 1);

Usuwanie po jednym znaku z początku stringa jest kosztowne (w przeciwieństwie do np std::string_view::remove_prefix). Jeden erase jest wystarczający, jeżeli koniecznie chcemy go użyć:

string a = "23           sokol czarny";
int b = stoi(a);
string c = a.substr(a.find_first_not_of(' ', a.find(' '))); 
a.erase(0, a.find_first_not_of(' ', a.find(' ')));
cout << b << "|" << a << "\n";
komentarz 19 lutego 2023 przez VBService Ekspert (253,400 p.)

Wychodzi Mi, że 3 linia jest zbędna wink

[ on-line ]

    string a = "23           sokol czarny";
    int b = stoi(a);
    a.erase(0, a.find_first_not_of(' ', a.find(' ')));
    cout << b << "|" << a << "\n";

 

Podobne pytania

+1 głos
2 odpowiedzi 342 wizyt
0 głosów
2 odpowiedzi 460 wizyt
pytanie zadane 4 października 2018 w PHP przez hiper007 Stary wyjadacz (11,270 p.)
0 głosów
1 odpowiedź 1,067 wizyt
pytanie zadane 3 stycznia 2016 w C i C++ przez agre Użytkownik (550 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...