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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> reverse string добавляет в конце "1" - почему? 
V
    Опции темы
Killer_13
Дата 6.5.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нонсенс какой-то, вроде все правильно делаю, а вот ума не приложу почему так.
значит есть у меня строка, нужно перевернуть ее

например на входе
"061"
на выходе должно выдать
"160"
вместо этого выдает 161

Код

for(j=0,i=strlen(s1)-1; i>0; i--)
        {
        s1[j]=s1[i];
        j++;
        }
    return printf("\n\n\nS=%s",s1);    

PM MAIL   Вверх
azesmcar
Дата 6.5.2009, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Вместо
Цитата(Killer_13 @  6.5.2009,  18:24 Найти цитируемый пост)
s1[j]=s1[i];

надо
Код

char temp = s1[j];
s1[j] = s1[i];
s1[i] = temp;

Их надо менять местами а не присваивать

Добавлено через 4 минуты и 9 секунд
А вообще цикла до половины длины текста вполне достаточно
Код

int len = strlen(s1);
for(int i = 0; i < len / 2; ++i)
{
    char temp = s1[i];
    s1[i] = s1[len - i - 1];
    s1[len - i - 1] = temp;
}

а вообще
Код

std::reverse(s1, s1 + strlen(s1));

или еще лучше
Код

std::string r = "061";
std::reverse(r.begin(), r.end());

PM   Вверх
Killer_13
Дата 6.5.2009, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хммм, может я опять че т не так делаю. :(

Язык "С"

Код

char s1[255],temp;
unsigned int i,j,lng;

....................................................


    for(j=0,i=strlen(s1)-1; i>0; i--)
        {
        temp = s1[i];
        s1[i] = s1[j];
        s1[j] = temp;
        j++;
        }
 

но этот код выдает еше большую беспорядицу. :(
PM MAIL   Вверх
azesmcar
Дата 6.5.2009, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Код

int main()
{
    char s1[255] = "061";
    char temp;
    unsigned int i, j;

    for(j=0,i=strlen(s1)-1; i>0; i--)
    {
        temp = s1[i];
        s1[i] = s1[j];
        s1[j] = temp;
        j++;
    }
    printf("%s\n", s1);
}

этот код не работает? smile 
PM   Вверх
Killer_13
Дата 6.5.2009, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хммм, но факт остается фактом... :(
Код

#include <stdio.h>
int main()
{
    char s1[255] = "7023554";
    char temp;
    unsigned int i, j;
    for(j=0,i=strlen(s1)-1; i>0; i--)
    {
        temp = s1[i];
        s1[i] = s1[j];
        s1[j] = temp;
        j++;
    }
    printf("%s\n", s1);
}



выдаст
Код

4023557

PM MAIL   Вверх
azesmcar
Дата 6.5.2009, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Killer_13

Ну так алгоритм неправильный smile Я же привел рабочий вариант
Код

#include <stdio.h>
#include <string.h>
int main()
{
    char s1[255] = "7023554";
    char temp;
    unsigned int i;
    unsigned int len = strlen(s1);
    for(i = 0; i < len / 2; ++i)
    {
        temp = s1[i];
        s1[i] = s1[len - i - 1];
        s1[len - i - 1] = temp;
    }
    printf("%s\n", s1);
}

Killer_13

скажу больше..еще одна итерация - и вы вернете текст в первозданный вид smile 
как я сказал ранее

Цитата(azesmcar @  6.5.2009,  18:33 Найти цитируемый пост)
цикла до половины длины текста вполне достаточно



Это сообщение отредактировал(а) azesmcar - 6.5.2009, 19:50
PM   Вверх
J0ker
Дата 6.5.2009, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Killer_13 @  6.5.2009,  19:36 Найти цитируемый пост)
Хммм, но факт остается фактом... :(

естественно
вы переставляете символы два раза за исключением первого и последнего


--------------------
user posted image
PM MAIL   Вверх
stat007
Дата 6.5.2009, 20:16 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -2
Всего: -4



самый оптимальный вариант:

Код

#include <iostream>
#include <string>
#include<algorithm>
using namespace std;
int main()
{
    string s;
    getline(cin, s);
    reverse(s.begin(), s.end());
    cout<<s<<endl;
    return 0;
}

PM MAIL   Вверх
Killer_13
Дата 6.5.2009, 20:19 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



stat007 
Эт "С" программирование
PM MAIL   Вверх
azesmcar
Дата 6.5.2009, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



stat007

Оптимальным будет вот этот
Код

#include<iostream>
#include<string>
#include<algorithm>

using namespace std;

int main()
{
    string s;
    getline(cin, s);
    copy(s.rbegin(), s.rend(), ostream_iterator<char>(cout));
    return 0;
}

но человек написал что нужно на Си.

Добавлено через 23 секунды
Killer_13

Ну? не заработало? smile 
PM   Вверх
Killer_13
Дата 6.5.2009, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Заработало, спасибо. уже 6 часов из-зи компа не встаю, а оно как то мне не идет - эт программирование. :( 
PM MAIL   Вверх
Soah
Дата 6.5.2009, 20:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Killer_13, так что же тебе надо, самому реализовать эту функцию, или использовать strrev() ?
PM MAIL   Вверх
Killer_13
Дата 6.5.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вот я тупой, никогда внимательно не посмотрю. :(
пасиб, буду знать.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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