Tablice char* ,odczyt z tablicy

0

Cześć, w jaki sposób mógłbym odczytać po kolei wszystkie znaki z jednego znaku tablicy char*?

1
#include <iostream>

int main(int argc, char * argv[])
{
    char *text = "To jest napis";

    for (int i = 0; i < strlen(text); i++)
    {
        std::cout << text[i];
    }
    std::cout << std::endl;

    system("pause"); //debug only
    return EXIT_SUCCESS;
}
0

Dziękuje

2

Odnośnie postu Białego Terrorysty:
const char* jeśli już. To co napisałeś nie powinno się kompilować tak gdzieś od 2011 roku, a przynajmniej od 1998 było już mocno passé. W C++ literał ciągu ma typ const char[N], który dzięki standardowej konwersji stanie się const char*. Nie możesz sobie tak przypisać const char* do char* bo opuszczasz const - a to już grzech.

for (int i = 0; i < strlen(text); i++)

Ile razy wykona się strlen(text)? Sprytny kompilator może to zoptymalizuje. Może. O ile wykryje, że to wywołanie nie ma żadnych efektów ubocznych i zawsze zwraca tę samą wartość. Gwarancji na to nie masz.

Co do reszty, po mojemu - wywalić i pause i endl i return. Bo i to i to i to niepotrzebne. :P (Chociaż sprawa jest interesująca z tą kobinacją endl i pause... Kto się pierwszy domyśli o co chodzi dostanie ciasteczko w tekstowej formie. :P Podpowiedź: No, może nie tyle z kombinacją, co z sytuacją gdybyśmy usunęli tylko endl. ;) )

0

Tylko tablica char* z przykładu ma jeden element a co jeśli będzie ich więcej?

1

Musisz jaśniej, bo to co mówisz można zinterpretowac na masę sposobów...
"Tablica char*" brzmi jak char* tablica[N] - czyli chodzi Ci o tablicę wskaźników na char?
Może jakiś przykład ilustrujący o co Ci chodzi?

0

No na przykład mam tablice char* tab[5] ={"ab","ac","ad","ae","abc"};
I teraz chciałbym odczytać znaki z każdego z tych 5 znaków , próbuje to zrobić tak jak na podanym przykładzie ale pojawia się błąd kompilacji: cannot covert 'char**' to 'const char*' for argument '1' to 'size_t strlen(const char*)'

2

odczytać znaki z każdego z tych 5 znaków
Chciałeś powiedzieć "odczytać znaki z każdego z tych pięciu ciągów/stringów". "cośtam" to nie jest "znak" a tablica znaków/ciąg znaków/string/null-terminated string/c-string, 'a' jest za to "znakiem".
No i znowu - const char* tab[5] - bo odnosisz się do literałów, a te w C++ są zawsze const!

No to masz tablicę ciągów, chcesz po kolei mieć dostęp do pojedynczych znaków? No to:

for (int i = 0; i < N; ++i) {
    const char* c = tab[i];
    while (*c) {
        printf("'%c'\n", *c);
        ++c;
    }
}
0

A wiesz może co jest źle z tym programem ?

text[N]={};
for(int j=0 j<N; j++)
for (int i = 0; i < strlen(text); i++)
    {
        cout << text[i];
    }

 
1

Jak już coś to w ten sposób:

#include <iostream>

using namespace std;

int main(int argc, char * argv[])
{
    const int N = 5;
    const char *text[N] = { "abc", "def", "ghj", "klm", "nop" };

    for (int j = 0; j < N; j++)
    {
        cout << text[j] << endl;
    }
    system("pause");
    return EXIT_SUCCESS;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1