Cześć, w jaki sposób mógłbym odczytać po kolei wszystkie znaki z jednego znaku tablicy char*?
#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;
}
Dziękuje
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
. ;) )
Tylko tablica char* z przykładu ma jeden element a co jeśli będzie ich więcej?
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?
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*)'
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ą zawszeconst
!
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;
}
}
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];
}
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;
}