2014-10-19 4 views
-3

Мой код - это просто я хочу преобразовать цикл do-while в цикл for или while, как это сделать. Точкой программы является обратное входное слово. например, если вы добавите abc, он будет выводиться как cba.Преобразование цикла do-while в цикл while

int main() 
{ 

    while (i < --length - 1); 
     cout << word << endl; 
return 0; 
} 
+0

['std :: reverse'] (http://en.cppreference.com/w/cpp/algorithm/reverse). – user657267

+0

, но нет ли другого способа изменить его, просто изменив вышеуказанную программу? – user3467226

+0

Тогда вам нужно будет объяснить конкретные ограничения, потому что есть много способов изменить строку, что проще, чем другие. Проще всего, конечно, просто использовать обратную функцию. –

ответ

0

Альтернативой является это, что не мешает делать что-либо со строками размером 0 или 1:

int length = word.length(); 
if (length > 1) 
{ 
    int i = 0; 
    char ch; 
    while (i < length) 
    { 
     ch = word[i]; 
     word[i] = word[length - 1]; 
     word[length - 1] = ch; 
     i++; 
     length--; 
    } 
} 

Для версии:

int length = word.length(); 
if (length > 1) 
{ 
    char ch; 
    for(int i = 0; i < length; i++, length--) 
    { 
     ch = word[i]; 
     word[i] = word[length - 1]; 
     word[length - 1] = ch; 
    } 
} 
2

Традиционный способ преобразовать время цикла в цикл принимает такую ​​форму:

// While loop 
int i = 0; 
while(i < n) { 
    // Amazing things happen here 
    i++; 
} 

// Equivalent for loop 
for(int i = 0; i < n; i++) { 
    // Amazing things still happen here 
} 

Таким образом, применяется к коду, это будет выглядеть примерно так:

char ch = word[i]; 
word[i] = word[length - 1]; 
word[length - 1] = ch; 

for(int i = 0, length = word.length(); i < --length - 1; i++) { 
    char ch = word[i]; 
    word[i] = word[length - 1]; 
    word[length - 1] = ch; 
} 

Примечание что, поскольку цикл do-while выполняет цикл цикла перед тестированием, мне пришлось поставить одну копию тела цикла спереди. Чтобы избежать необходимости обновлять две разные копии кода, вы можете извлечь тело цикла в функцию, которая затем вызывается перед циклом и в теле цикла.

А для версии с в то время как петля:

int i = 0, length = word.length(); 

char ch = word[i]; 
word[i] = word[length - 1]; 
word[length - 1] = ch; 

while(++i < --length) { 
    char ch = word[i]; 
    word[i] = word[length - 1]; 
    word[length - 1] = ch; 
} 
+0

Я попытался запустить ваш код, и он, похоже, не работает. Но вы говорите, что код, который у меня есть в теле моего цикла do-while, должен появиться перед циклом while, если я должен был преобразовать его в в то время как цикл. – user3467226

+0

Да. Единственное различие между циклом while и циклом do-while состоит в том, что цикл do-while проверяет состояние после того, как один цикл цикла будет выполняться один раз. – APerson

+0

Обратите внимание, что 'i <--length - 1' совпадает с (запрет переполнения, что не является проблемой для встречи в середине)' i + 1 <--length'. Также вы хотите постепенно увеличивать, поэтому 'while (++ i <--length)' –

Смежные вопросы