wazer | 2021-02-17 10:25:17 UTC | #1
Czemu nie można używać zakresowego for w linii 7
#include
using namespace std;
void coutContentOfTheArray(const char source[]) {
/*
for(auto & elem : source){
cout<<elem;
if(elem == 0)cout<<endl;
}
*/
for (int i = 0; i <= 100; ++i) {
cout << source[i];
//if(source[i]== 0)cout<<i<<':'<<source[i]<<endl;
}
cout << endl;
}
void copyArrayWordsEvenOdd(const char source[], char evenWords[], char oddWords[]) {
int iSourceCharacterNumber = 0;
int iOddCharacterNumber = 0;
int iEvenCharacterNumber = 0;
bool isEven = true;
do {
if (source[iSourceCharacterNumber] == ' ') {
if (isEven) {
evenWords[iEvenCharacterNumber] = source[iSourceCharacterNumber];
++iEvenCharacterNumber;
} else {
oddWords[iOddCharacterNumber] = source[iSourceCharacterNumber];
++iOddCharacterNumber;
}
++iSourceCharacterNumber;
isEven = !isEven;
}
if (isEven) {
evenWords[iEvenCharacterNumber] = source[iSourceCharacterNumber];
++iEvenCharacterNumber;
++iSourceCharacterNumber;
} else {
oddWords[iOddCharacterNumber] = source[iSourceCharacterNumber];
++iSourceCharacterNumber;
++iOddCharacterNumber;
}
} while (source[iSourceCharacterNumber] != 0);
evenWords[iEvenCharacterNumber] = 0;
oddWords[iOddCharacterNumber] = 0;
}
int main() {
char source[100] = {"pierwszy drugi trzeci czwarty piaty"};
char evenWords[100]{0};
char oddWords[100]{0};
/*
for(auto elem : source){
cout<<elem;
if(elem == 0)cout<<endl;
}
*/
copyArrayWordsEvenOdd(source, evenWords, oddWords);
//source[14]=5;
//cout<<source[14];//
coutContentOfTheArray(oddWords);
}
Nieznajomy11 | 2020-11-14 17:13:18 UTC | #2
[quote=”wazer, post:1, topic:16729”]
i czemu nie można używać zakresowego for w linii 7
[/quote]
Podczas przekazywania tablicy jako parametr jest ona traktowana jako wskaźnik. Tablice z zasady są nieciekawe w używaniu. Przyszły do C++ prosto z C.
Dlatego właśnie używa się takich rzeczy jak std::vector. Można to jednak “obejść” używając template
, np. w taki sposób:
#include <iostream>
template <typename T>
void arrayTest(T& source) {
for (auto &elem : source) {
std::cout << elem;
}
}
int main() {
char source[100] = {"pierwszy drugi trzeci czwarty piaty"};
arrayTest(source);
return 0;
}
system | 2021-02-17 10:31:43 UTC | #3
Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.