С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
katrina0811
0 / 0 / 0
Регистрация: 20.12.2011
Сообщений: 11
#1

Что выполняет эта часть программы? - C++

09.01.2012, 19:12. Просмотров 408. Ответов 4
Метки нет (Все метки)

Задача: Изменить порядок символов в строке S1 на обратный не используя других строк.
Код программы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include <iostream>
#include <string.h>
using namespace std;
void main () {
    char S1[30], temp;
    int i;
    cout<<"Input String S1:\n";
    cin>>S1;
    cout<<"\nThe Result: \n\n"<<strrev(S1)<<"\n\n";
    for(i=0;i<strlen(S1)/2;i++) {
        temp=S1[i];
        S1[i]=S1[strlen(S1)-i];
        S1[strlen(S1)-i]=temp;
    }
}
Что выполняет эта часть программы:
C++
1
2
3
4
5
for(i=0;i<strlen(S1)/2;i++) {
        temp=S1[i];
        S1[i]=S1[strlen(S1)-i];
        S1[strlen(S1)-i]=temp;
    }
 Комментарий модератора 
Используйте теги форматирования кода!


Почему в цикле for(i=0;i<strlen(S1)/2;i++) strlen(S1)/2 делится именно на 2?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2012, 19:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что выполняет эта часть программы? (C++):

Классы. Римское число. Что выполняет эта часть кода? - C++
Что происходит в том месте что я отметил звездочками? И если у меня комментарии где то не правильные укажите на это место плиз =) ...

Что выполняет эта функция? - C++
void f1(char c) { int i, j; char s; for (i=0, c!='\0';i++); for (j=0, i--;i&gt;j; i--, j++) { s=c; c=c; c=s; } }

Что выполняет эта функция? - C++
int f4(char c) { int i, old, nw; for (i=0, old=0, nw=0; c='\0'; i++) { if (c==' ') old = 0; else...

Что именно выполняет эта программа? - C++
Прокоментируйте пожалуйста что происходит в программе со строчки : /*максимальное из чисел, встречающихся в заданной матрице более одного...

Что выполняет эта строка: res.insert? - C++
res.insert(res.begin(), ((Number &gt;&gt; i) &amp; 0x01) + 48); Добавлено через 53 секунды мне не понятны функции опишите что к чему

что делает эта часть - C++
int F1(char с) { int i,old,nw; for (i=0, old=0, nw=0; c ! = '\0' ; i++) { if (c = = ' ') old = 0; else { if (old==0) nw++; old...

4
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
09.01.2012, 19:16 #2
Цитата Сообщение от katrina0811 Посмотреть сообщение
Что выполняет эта часть программы:
Обменивает 2 символа строки.
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
09.01.2012, 19:19 #3
Цитата Сообщение от katrina0811 Посмотреть сообщение
Задача: Изменить порядок символов в строке S1 на обратный не используя других строк.
Именно этим она и занимается.

Добавлено через 1 минуту
Цитата Сообщение от katrina0811 Посмотреть сообщение
Почему в цикле for(i=0;i<strlen(S1)/2;i++) strlen(S1)/2 делится именно на 2?
Потому что символы обмениваются так: первый с последним, второй и с предпоследним и так далее. Таким образом, надо поменять длина строки / 2 символов.
1
-=ЮрА=-
Заблокирован
Автор FAQ
09.01.2012, 19:31 #4
Цитата Сообщение от katrina0811 Посмотреть сообщение
Почему в цикле for(i=0;i<strlen(S1)/2;i++) strlen(S1)/2 делится именно на 2?
- нам нужно повернуть строку, т.е как было сказано выше
Цитата Сообщение от silent_1991 Посмотреть сообщение
символы обмениваются так: первый с последним, второй и с предпоследним и так далее.
Но если бы мы делали полный проход по строке а не до её серидины
Цитата Сообщение от katrina0811 Посмотреть сообщение
strlen(S1)/2
, то на второй половине опять вернули бы все символы в своё изначальное положение
См мнемосхему
abcdef
strlen - 6
strlen/2 - 3
i = 0
fbcdea
i = 1
fecdba
i = 3
fecdcba
Если бы пошли дальше снова получили abcdef
1
easybudda
Модератор
Эксперт CЭксперт С++
9700 / 5650 / 964
Регистрация: 25.07.2009
Сообщений: 10,873
09.01.2012, 19:50 #5
Вот так поинтереснее будет
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <string.h>
 
void buf_reverse(unsigned char * buf, size_t count){
    if ( count > 1 ){
        *buf ^= *(buf+count-1);
        *(buf+count-1) = *buf ^ *(buf+count-1);
        *buf ^= *(buf+count-1);
        buf_reverse(buf+1, count-2);
    }
}
 
char * str_reverse(char * str){
    buf_reverse((unsigned char*)str, strlen(str));
    return str;
}
 
int main(void){
    char buf[256];
    
    while ( printf("String: ") && scanf("%255[^\n]%*c", buf) == 1 )
        printf("Reverse: %s\n", str_reverse(buf));
    
    return 0;
}
0
09.01.2012, 19:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2012, 19:50
Привет! Вот еще темы с ответами:

обьясните структуру программы что выполняет каждая строчка - C++
#include &lt;stdio.h&gt; #include &lt;limits.h&gt; #define n 3 #define m 3 int main() { int matrix = { {1, 2, 3},

Что делает эта строка из программы применительно к входному потоку - C++
собственно вот и строка которая мне не понятна, применяется к входному потоку соответственно in.clear(std::ios::failbit |...

Что делает рекурсивная часть программы? - C++
Здравствуйте, писали на лабораторной программу с использованием рекурсии, о бъясните почему в ответе двойки выдает?? и что рекурсивная...

Как работает эта часть кода? - C++
element *el, *n_el; int i; n_el = (element *)malloc(sizeof(element)); printf(&quot;Vvedite FIO: &quot;); scanf(&quot;%32s %32s %32s&quot;,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.