简体   繁体   中英

printing a char array backwards c++ using loops

i am trying to print an array of unknown length backwards so wrote that the loop should start at the terminator and go to the first letter printing each letter but it keeps printing only the first

#include <iostream>
using namespace std;

int main()
{
    char word[10];
    int i;

    cout << "Enter a word: " ;
    cin >> word;

    for ( word[i]= '\0'; word[1] <0; word[i] --)
    {
        cout << word[i] << endl;

    }
    return 0;
}

You can print you C-style string backwards whith this one-liner:

reverse_copy(word,word+strlen(word),ostream_iterator<char>(cout));

Also please consider using std::string :

string word;
cin >> word;

copy(word.rbegin(),word.rend(),ostream_iterator<char>(cout));

You will need to #include the following headers for the above examples to work:

<algorithm>, <iostream>, <iterator>, <string> and <cstring>

Replace your loop it does nothing:

for (i= strlen(word); i >=0; i--)
    {
        cout << word[i] << endl;  //endl is optional

    }

Also for in case of long strings you may have to increase size of char array or its better to use

string word;
for (i= word.size(); i >=0; i--)
        {
            cout << word[i] << endl;  //endl is optional

        }

Here is a simple way to print a C-style string backwards.

for (size_t i = 0, i_end = std::strlen(word); i != i_end; ++i)
{
    std::cout << word[i_end - i - 1];
}
std::cout << "\n";

Note that I save the result of strlen so that it is not called every time.

To get the result you want, you might want to use this code...

char word[10];
int sz; 

do {
    cout << "Enter a word: ";
    cin >> word;
    sz = strlen(word);

} while (sz > 10);


for (int i = sz; i >= 0; i--)
{
    cout << word[i];

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM