Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> неправильно работает функция инвертирования строки 
:(
    Опции темы
GQU
Дата 12.8.2014, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 13.2.2011

Репутация: нет
Всего: нет



Почему функция неправильно работает
Вводишь 12345
Выдает 52345
Хотя если в функции invert, а не в main-е вывести printf-м tmp, все норм, т.е 54321
Код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


//функция копирования строки, по образу и подобию, как в библиотеке

//функция инвертирования строки
void invert(char* s){
    int i,j;
    char tmp[255];

    j=0;
    i=strlen(s)-1;
    while(i>=0){
        tmp[j]=s[i];
        i--;j++;
    }
    tmp[j]='\0';
    *s=*tmp;
}

//отсортировать массив строк


void main(){
    char buf[255];
    scanf("%s",buf);
    invert(buf);
    printf("%s    \n",buf);

    system("pause");
}


Это сообщение отредактировал(а) GQU - 12.8.2014, 23:40
PM MAIL   Вверх
Cheloveck
Дата 13.8.2014, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 5
Всего: 32



Цитата(GQU @  13.8.2014,  00:29 Найти цитируемый пост)
*s=*tmp;

Это копирует первый символ

Это сообщение отредактировал(а) Cheloveck - 13.8.2014, 00:08


--------------------
user posted image
PM Jabber   Вверх
Cheloveck
Дата 13.8.2014, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 5
Всего: 32



И да, ходить по всей длине не круто. Тут же половины достаточно.
Код

#include <stdio.h>
#include <string.h>

void swap(char * left, char * right)
{
    char temp = *left;
    *left = *right;
    *right = temp;
}

void inverse(char * str)
{
    size_t len = strlen(str);
    size_t half_len = len / 2;
    size_t i;
    for(i = 0; i < half_len; ++i)
        swap(&str[i], &str[len - i - 1]);
}

int main()
{
    char str[] = "1234567890";
    inverse(str);
    printf("%s\n", str);
    return 0;
}

http://ideone.com/cH7o3d

Это сообщение отредактировал(а) Cheloveck - 13.8.2014, 00:43


--------------------
user posted image
PM Jabber   Вверх
GQU
Дата 13.8.2014, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 13.2.2011

Репутация: нет
Всего: нет



Цитата

И да, ходить по всей длине не круто. Тут же половины достаточно.

спасибо, я уже сам написал

Это сообщение отредактировал(а) GQU - 13.8.2014, 14:49
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0655 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.