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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] Строки, перестановка слов местави 
V
    Опции темы
1122
  Дата 20.12.2007, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте. Я новичек в программировании. Нужно сделать такое задание на Си:
есть строка "мама мыла раму", нужно поменять местами слова так: "раму мыла мама".
Уже всю голову сломал.
Подскажите пожалуйста алгоритм или код (только без "заумностей" пожалуйста, а то я еще начинающий программист). Заранее спасибо.
Можно испльзовать функции библиотеки string.h
PM MAIL   Вверх
Silent_s
Дата 20.12.2007, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Есть программка ставит последнюю букву в строке на место первой! До думаешь сам как со словами! smile 
Код

#include <stdio.h>
#include <string.h>
int main()
{
int k, i;
char str1[256], str2[256], *p1;
p1 = str1;

printf("Input string: ");
p1 = gets(str1);

printf("String: %s\n", p1);
k = 0;
while ( (*p1++) != '\0' )
++k;
printf("Number symbols string: %i\n", k);

printf("Exchange string: ");
str2[0] = str1[k-1];
printf("%c", str2[0]);
for (i = 0; i < (k-1); ++i)
{
str2[i+1] = str1[i];
printf("%c", str2[i+1]);
}

printf("\nPress any key...");
getchar();

return 0;
}


--------------------
Мой блог
PM MAIL   Вверх
1122
Дата 20.12.2007, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



блин...
Никак не получается моернезировать код, чтобы он именно выводил "раму мыла мама".
записать так легко:"умар алым амам"
Помогите плиз.

Это сообщение отредактировал(а) 1122 - 20.12.2007, 23:31
PM MAIL   Вверх
Twilight
Дата 21.12.2007, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я думаю нужно загнать строку в массив и "развернуть" её. Крутится в голове, но объяснить не могу...
PM   Вверх
1122
Дата 21.12.2007, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Что я уже только не пытался делать.
Вот был и такой код, но он не совсем правильный...

Код

int main()
{
    char s[] = "mama mila ramy";
    char s1[50];
    int i, j, q, a;

    q = strlen(s);
    a = 0;
    for(i= strlen(s)-1; i >= 0; i--)
    {
        if((s[i]==' ') || (i == 0))
        {
            for(j=i+1; j<q; (j++)&&(a++))
            {
                if(j == q-1)
                {
                    s1[a]= s[j];
                    s1[a+1]=' ';
                    break;
                }
                else 
                {
                    s1[a] = s[j];
                    
                    //a++;
                }
            }
            q = i;
        }
    printf("%s", s1);
    }
    getch();
    return 0;

}

PM MAIL   Вверх
Twilight
Дата 21.12.2007, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Тебе когда сдавать? Мне нужно сделать много лабораторных к четвергу, поэтому написать тебе код смогу только в четверг.

У меня уже есть идея.
PM   Вверх
1122
  Дата 21.12.2007, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



сегодня вечером сдавать  :(
PM MAIL   Вверх
1122
  Дата 21.12.2007, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот еще один код, по логике вроде ве правильно, а почему-то не работает. запукскается и показывает пустой экран. Никто не подскажет в чем ошибка?

Код

#include <stdio.h>
#include <string.h>
#include <conio.h>
int main()
{
    int k, i, d;
    char str1[] = "mama mila ramy";
    char str2[50];
    
    d = strlen(str1)-1;
    k = 0;
    while(d == 0)
    {
        if(str1[d] = ' ')
        {
            i = d + 1;
            while((str1[i]== ' ') || (str1[i] == '\0'))
            {
                str2[k] = str1[i];
                k++;
                i++;
            }
        }
        if(d == 1)
        {
            i = d - 1;
            while(str1[i]== ' ')
            {
                str2[k] = str1[i];
                k++;
                i++;
            }

        }
        d--;
    }
    

printf("%s", str2);
getch();
return 0;
}

PM MAIL   Вверх
Twilight
Дата 21.12.2007, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Примерно так. Дальше сам дописывай. У тебя ещё есть время. А мне нужно бежать. Зачёт сегодня по английскому.

Код

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

int main()
{
    char* s[1] = {"mama mila ramy"};
    char* result[16];
    int i;
    for(i = 0; i < 16; i++)
    {
        result[16 - i] = s[0 + i];
    }
    result[16] = "\0";
    for(i = 0; i < 16; i++)
    {
        printf(result[i]);
    }
}


В коде куча ошибок, но идею я тебе подал.
PM   Вверх
1122
Дата 21.12.2007, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ок. Спасибо. Сейчас гляну.



Это сообщение отредактировал(а) 1122 - 21.12.2007, 12:31
PM MAIL   Вверх
1122
Дата 21.12.2007, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Алгоритм не подходит.
Все равно "зеркало" получается.
Эта строчка
Код

result[16 - i] = s[0 + i];

ставит на место последнего элемента первый и т.д.
было: мама мыла раму
Получается: умар алым амам

PM MAIL   Вверх
1122
Дата 21.12.2007, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



блин... это полюбому как-то связано с strncpy(s1, s+i, n) или strncat(s1, s+i, n)
Но как это записать!?
PM MAIL   Вверх
mrbrooks
Дата 21.12.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Не ты куда то не туда копаешь. Пробуй.
Код

int main()
{
    char s[10] = "1234567890";
    char s1[10];
    int j = strlen(s);
    
for(i = 0, a =i-1; i < j; i++)  s1[i] = s[a--];
cout << s1;
cin.get();
}



Это сообщение отредактировал(а) mrbrooks - 21.12.2007, 14:26
PM MAIL   Вверх
1122
  Дата 21.12.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо всем за то, что пытались помочь.
Вот.. после долгих радумий, ошибок и проб я сделал это. Не знаю на сколько правильно с точки зрения красивого написания и стиля, но показывает то, что должно показывать:

Код

int main()
{
    char s[20] = "mama mila papy";
    char s1[20];
    int i;
    
    for(i = 13; i >= 0; i--)
    {
        if(s[i] == ' ')
        {
            strncat(s1, s+i, 6);
            //strncpy(s1, s+i, 4);
            //s1 = s1 + ' ';
        }
        if(i == 0)
            strncat(s1, s, 5);
            //strncpy(s1, s, 4);
    }

    printf("%s", s1);
    getch();
    return 0;
}


Только вот как универсализовать этот код? чтобы 3й аргумент в strncat(s1, s+i, N); определялся автоматически....

Это сообщение отредактировал(а) 1122 - 21.12.2007, 14:29
PM MAIL   Вверх
mrbrooks
Дата 21.12.2007, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Посмотри мой на предыдущей странице.
PM MAIL   Вверх
1122
Дата 21.12.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



mrbrooks, ок. Спасибо. Ща гляну.
PM MAIL   Вверх
mrbrooks
Дата 21.12.2007, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Правда я считаю что все равно делаем велосипед ибо есть стандартная функция strrev(s). Она  инвертирует входящую строку s  smile .
PM MAIL   Вверх
1122
  Дата 21.12.2007, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



mrbrooks, что неправильно делаю?
Выводит пустойэ кран.

#
Код

include <stdio.h>
#include <string.h>
#include <conio.h>
int main()
{
    int i, a;
    char s[20] = "1234567890";
    char s1[20];
    int j = strlen(s);
    
for(i = 0, a =i-1; i < j; i++)  
s1[i] = s[a--];
printf("%s", s1);
getch();
}


Добавлено через 1 минуту и 46 секунд
mrbrooks, эта функция библиотеки string.h ?
Если да, то можно поподбробнее...
P.s. в задании написано, что можно плоьзоваться функциями библиотеки string.h.
PM MAIL   Вверх
mrbrooks
Дата 21.12.2007, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



ага. в strring.h 

пиши
Код

printf(strrev(s));


и никакого гемора  smile 
PM MAIL   Вверх
1122
Дата 21.12.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Выдает зеркало:
умар алым амам 
PM MAIL   Вверх
mrbrooks
Дата 21.12.2007, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



ааа блин ссори имхо - не так прочитал твою просьбу. smile  блин во я болда smile

Добавлено через 6 минут
Ща чего нить организуем
PM MAIL   Вверх
mrbrooks
Дата 21.12.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Код

#include <iostream.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
FILE *file;
char str[] = "fuck up gemor";
cout << str << endl;
char str1[10], str2[10], str3[10];
file = fopen("fuck.tmp","w+");
 fprintf(file,str);
fclose(file);
file = fopen("fuck.tmp","r+");
fscanf(file,"%s %s %s", str1, str2, str3);
fclose(file);
cout << str3 << ' ' << str2 << ' ' << str1;
remove("fuck.tmp");
cin.get();
return 0;
}



сходу такое решение. подойдет. просто и злобно smile 

Это сообщение отредактировал(а) mrbrooks - 21.12.2007, 15:58
PM MAIL   Вверх
1122
Дата 21.12.2007, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



mrbrooks, спасибо, что не пожалели личного времени и помогли!
 ! 
archimed7592
Не забываем пользоваться кнопкой вопрос решён или соответствующей галочкой в форме ответа.


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

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

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

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

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


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

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


 




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


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

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