Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Podział stringa na znaki (char)

Ostatnio zmodyfikowano 2019-05-30 21:06
Autor Wiadomość
kocotian.2805
Temat założony przez niniejszego użytkownika
Podział stringa na znaki (char)
» 2019-05-29 18:29:43
POMOCY! Szukam już pół godziny i za nic nie mogę znaleźć odpowiedzi na pytanie - Jak podzielić stringa (std::string) na znak (char)
Miałoby to wyglądać w ten sposób, że ze stringa program miałby "wykrywać" znaki od początku. Buduję program z autorską biblioteką, więc funkcja "cnulls()" odpowiada za kolorowe bloki.

C/C++
string linia = "wwwllldlllwww*";
char znak;
do {
    //tu funkcja pobierająca znak z linii
    if( znak == 'w' ) cnulls( 1, 0xff );
   
    if( znak == 'l' ) cnulls( 1, 0x77 );
   
    if( znak == 'd' ) cnulls( 1, 0x88 );
   
    if( znak == 'b' ) cnulls( 1, 0x00 );
   
} while( znak != '*' )

PS. To będzie gra, więc proszę o coś w miarę efektywnego ;)
P-174733
kocotian.2805
Temat założony przez niniejszego użytkownika
NIe działa
» 2019-05-29 19:05:23
Jednak nie działa, choc powinno :P
ZOSTAWIAM KOD DLA POCZĄTKUJĄCYCH:
C/C++
#include "C:/BAGE/BAGE.h"
using namespace std;

int main() {
    string s;
    s = "cpp0x";
    for( int n; n > 90; n++ ) {
        if( s[ n ] == 'b' ) cnulls( 1, 0x00 );
       
        if( s[ n ] == 'd' ) cnulls( 1, 0x88 );
       
        if( s[ n ] == 'l' ) cnulls( 1, 0x77 );
       
        if( s[ n ] == 'w' ) cnulls( 1, 0xff );
       
    }
}
P-174734
Jacob99
» 2019-05-29 19:27:57
Masz błąd w pętli. Raczej nie chcesz iterować od 90 w górę. Jak chcesz iterować po stringu możesz użyć zakresowego for:
C/C++
for( auto item: string )
{
    if( item == 'b' ) //...
    //...
         }
Ponadto lepiej używaj konstukcji
else if(...)
, będzie mniej sprawdzeń, czyli większa efektywność.

PS. W dyrektywie #include nie używaj ścieżek bezwzględnych.
P-174735
pekfos
» 2019-05-30 00:18:52
C/C++
std::string str = "abcd";

for( size_t i = 0; i < str.size(); ++i )
     std::cout << str[ i ] << ' ';
// Lub
for( char c: str )
     std::cout << c << ' ';
P-174736
kocotian.2805
Temat założony przez niniejszego użytkownika
Nie działa :P
» 2019-05-30 18:37:42
[Error] range-based 'for' loops are not allowed in C++98 mode
P-174737
pekfos
» 2019-05-30 21:06:10
pętle „for” oparte na zakresie nie są dozwolone w trybie C ++ 98
https://translate.google.pl
Więc użyj trybu C++11 lub nowszego. Albo drugiej wersji, z tych które podałem.
P-174738
« 1 »
  Strona 1 z 1