Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Решите пожалуйста задачу на Си!!!!!!

47K
29 апреля 2009 года
artem7213
10 / / 29.04.2009
Я совсем не силён в строках....Не могли бы Вы помочь мне с одной задачей?

Условие: Дана строка текста, состоящая из слов, разделённых одним из знаков [ # , $ , * , - ]. Если количество слов в предложении чётно, поменяйте местами 2 центральных слова, а если нечётно удалите одно центральное слово.:confused:
7.0K
29 апреля 2009 года
pink master
79 / / 21.10.2006
Вот, хотя легче было бы с strtok...
Код:
#include <iostream>
#include <cstring>

using namespace std;

int main() {
    char str[] = "1#2*3$4";
    cout << "BEFORE " << str << endl;


    int length = strlen(str);
    int word_num = 0;
    int indexes[length];
    int sizes[length];


    int word_length = 0;


    for(int i = 0; i < length; ++i) {
        if(str == '#' || str == '$' || str == '*' || str == '-') {
            if(word_length != 0) {
                word_num++;
                indexes[word_num] = i - word_length;
                sizes[word_num] = word_length;
                word_length = 0;
            }
        } else {
            word_length++;
            if(i == length - 1) {
                word_num++;
                indexes[word_num] = i - word_length;
                sizes[word_num] = word_length;
            }
        }
    }

    char out[length];

    if(word_num % 2 == 0 && word_num != 0) {
        //prefix
        int left = indexes[word_num/2];

        for(int i = 0; i < left; ++i) {
            out = str;
        }

        // right word first
    int right = indexes[1+word_num/2];
        int right_size = sizes[1+word_num/2];
        for(int i = 0; i < right_size; ++i) {
            out[left + i] = str[right + i];
        }

        // delimiter
        int left_end = left + sizes[word_num/2];
        int del_size = right - left_end;
        for(int i = 0; i < del_size; i++) {
            out[left + i + right_size] = str[left_end + i];
        }


        // left word second
        int left_size =  sizes[word_num/2];
        for(int i = 0; i < left_size; i++) {
            out[left + right_size + del_size + i] = str[left + i];
        }

        //postfix
        int right_end = right + right_size;
        for(int i = 0; i < length - right_end + 1; ++i) {
            out[right_end + i] = str[right_end + i];
        }

        cout << "AFTER  " << out << endl;

    }

    return 0;
}
47K
29 апреля 2009 года
artem7213
10 / / 29.04.2009
Спасибо огромное, но в ней Dev C++ нашёл много ошибок,которые я что то не смог исправить, так как в этих темах я не силён
47K
29 апреля 2009 года
artem7213
10 / / 29.04.2009
а кто нить мог бы попробовать решить задачу с - strtok?
7.0K
30 апреля 2009 года
pink master
79 / / 21.10.2006
Цитата: artem7213
Спасибо огромное, но в ней Dev C++ нашёл много ошибок,которые я что то не смог исправить, так как в этих темах я не силён


никогда не юзал дев с++
кинь хоть вывод
Я тупо из g++ компилил, все работает. А с strtok подстава что он разделители ест

7
30 апреля 2009 года
@pixo $oft
3.4K / / 20.09.2006
Попробовал в DevC++ код,предложенный pink master–всё работает,ни единой ошибки.Код был скопирован в точности так,как приведён тут
Действительно,выложи хотя б то,что компилятор написал
47K
30 апреля 2009 года
artem7213
10 / / 29.04.2009
Извиняюсь очень сильно,всё заработало,просто были проблемы с компилятором.спасибо, кстати, как на Linux подобрать что нить похожее на conio.h в Windows? просто я работаю на Си в Linux,но иногда приходится использовать Windows и Dev С++.Подскажите
47K
26 мая 2009 года
artem7213
10 / / 29.04.2009
Привет всем !!!! ))))) Извиняюсь,но у меня к Вам последняя просьба, последняя задача:
Написать функцию split_int (filename 0, filename 1, filename 2). Если первые k элементов файла filename 0>=0, эти элементы перенести в файл filename 1, а остальные элементы - в файл filename 2 (Прежнее результирующих файлов стирается).
9
27 мая 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: artem7213
Привет всем !!!! ))))) Извиняюсь,но у меня к Вам последняя просьба, последняя задача:
Написать функцию split_int (filename 0, filename 1, filename 2). Если первые k элементов файла filename 0>=0, эти элементы перенести в файл filename 1, а остальные элементы - в файл filename 2 (Прежнее результирующих файлов стирается).


Если кол-во элементов = 0, то особо не попереносишься. Очевидно, k элементов filename0 > 0.

Код:
// From: artem7213
// Task: Написать функцию split_int (filename 0, filename 1, filename 2).
//       Если первые k элементов файла filename 0>=0, эти элементы перенести
//       в файл filename 1, а остальные элементы - в файл filename 2 (Прежнее
//       результирующих файлов стирается).
// ----------------------------------------------------

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

int split_int( k, file0, file1, file2 )
int k;
char *file0, *file1, *file2;
{
    FILE *fin, *fout;
    char* buff;
    long fpos;

    if (k <= 0)
    return -1;
    else
    buff = (char*)malloc( k );

    fin = fopen( file0, "r" );
    if (fread( buff, sizeof(char), k, fin ) < k)
    {
    fclose( fin );
    return -1;
    }

    fout = fopen( file1, "w" );
    fwrite( buff, sizeof(char), k, fout );
    fclose( fout );

    fpos = ftell( fin );
    fseek( fin, 0L, SEEK_END );
    k = (int)(ftell( fin ) - fpos);
    buff = (char*)realloc( (char*)buff, (unsigned)k );
    fseek( fin, fpos, SEEK_SET );
    fread( buff, sizeof(char), k, fin );
    fclose( fin );

    fout = fopen( file2, "w" );
    fwrite( buff, sizeof(char), k, fout );
    fclose( fout );

    free( buff );

    return 1;
}

int main()
{
    if (!split_int( 4, "in.dat", "out1.dat", "out2.dat" ))
    printf( "error...\n" );

    return 0;
}

Безо всяких проверок и прочее. Сам допишешь.
47K
01 июня 2009 года
artem7213
10 / / 29.04.2009
не знаю.спасибо конечно...но она не работает
14
02 июня 2009 года
Phodopus
3.3K / / 19.06.2008
ну, если хоть чуть-чуть знаешь Си, легко сможешь поправить
47K
02 июня 2009 года
artem7213
10 / / 29.04.2009
Плиз кто нить доделайте её!!!!!!!
47K
03 июня 2009 года
artem7213
10 / / 29.04.2009
Ну не получается!!!!!!!!!!помогите плиз!!!!!!!!!
9
03 июня 2009 года
Lerkin
3.0K / / 25.03.2003
Чё орешь? Что не работает?
47K
04 июня 2009 года
artem7213
10 / / 29.04.2009
Я не ору.просто dev-cpp выдаёт несколько ошибок!
7
04 июня 2009 года
@pixo $oft
3.4K / / 20.09.2006
Ну а мы что–угадывать должны их,подбирать исходя из граничных условий?Хоть бы привёл текст–в какой строке,какая ошибка…
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог