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

Ваш аккаунт

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

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

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

Работа со строками в Си

87K
13 января 2013 года
growlier
3 / / 13.01.2013
Источник данных и результат работы программы – текстовый файл. Для кодирования текса используется кодовая таблица DOS. Составить программу, обрабатывающую файл согласно заданному алгоритму. /*с этим проблем не возникает никаких*/
Вывести из текста на консоль слова, у которых в i-й позиции располагается одна и та же буква. В исходном тексте поменять местами первую пару таких слов и вывести результат на консоль./*а вот тут уже беда, преподаватель не очень внятно объяснял работу со строками, не первый день над справочником сижу и не могу разобраться*/
1
13 января 2013 года
kot_
7.3K / / 20.01.2000
и что именно "не первый день" ты не можешь разобраться? Если вопрос в том - "решите за меня срочно" - то тема будет удалена как и все подобные темы. Если пытаешься разобраться - то пиши что именно не получается и ход своих рассуждений.
87K
13 января 2013 года
growlier
3 / / 13.01.2013
Цитата: kot_
и что именно "не первый день" ты не можешь разобраться? Если вопрос в том - "решите за меня срочно" - то тема будет удалена как и все подобные темы. Если пытаешься разобраться - то пиши что именно не получается и ход своих рассуждений.


Исходный текст записываю в строку, затем разбиваю его на лексемы(вот тут наверное 1я ошибка потому что лексемы записать в отдельный массив у меня не получается.)
Вот наверное в этом и дело, в остальном я разберусь.

1
13 января 2013 года
kot_
7.3K / / 20.01.2000
ну строго говоря, тебе вообще-то вроде и не нужно записывать лексемы. Тебе достаточно хранить сроки и слова. Можно конечно делать это более оптимально - создавать индекс для каждого слова - это даст вероятно скорость поиска, но более сложно в реализации. Приведи тот код в котором у тебя не получается.
88K
13 января 2013 года
NNxeon
1 / / 13.01.2013
Мы с ним вместе делаем это задание и не понятно как вообще его сделать. Нам хотя бы понять как забить поочередно каждое слово в массив и проверить на наличие буквы в i-ой позиции.
Вот мой код

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

    int i,op;
    char *text = "text.txt", *text_out = "text_out.txt";
    char textString[], *lexemsPtr, sym;
    int main()
    {
    /*Îòêðûâàåì ôàéëû*/
    FILE *inFile;
    inFile = fopen(text, "rt+");
    if(inFile == NULL)
    {
    printf("Error Open File %s!", text);
    return 1;
    }
    FILE *outFile;
    outFile = fopen(text_out, "wt+");
    /*âûòàñêèâàåì èç ôàéëà òåêñò*/
    fgets(textString, 1000, inFile);
    printf("%s", textString);
    printf("Enter number symbol: ");
    scanf("%d", &op);
    printf("Enter symbol: ");
    scanf("%c", &sym);
    /*ðàçáèâàåì òåêñò íà ñëîâà*/
    lexemsPtr=strtok(textString," ");
    if(lexemsPtr[op]==sym )
    printf("%s\n", lexemsPtr);
    while(lexemsPtr!=NULL)
    {
    if(lexemsPtr[op]==sym){
    printf("%s\n", lexemsPtr);}
    lexemsPtr=strtok(NULL," ");
    }

    /*çàêðûâàåì ôàéëû*/
    fclose(inFile);
    fclose(outFile);
    getchar();
    getchar();
    return 0;
    }
1
14 января 2013 года
kot_
7.3K / / 20.01.2000
во первых - для оформления кода используй форматирование.
во вторых - уточните - речь идет о C или все же о С++.
Если я правильно понял задачу - то для начала вам необходимо сформировать массив строк. И в него уже загружать строки из файла. Ведь вам же не только надо найти слова с указанной буквой в указанной позиции - вам надо еще поменять местами первую пару. Т.е. должна хранится информация о строках (как минимум номер строки, в которых выполнять замену ) и позиция слова в строке.
Если речь идет о С++ - можно (нужно) использовать классы vector<string>. Если речь идет о С - то тут массив из С-строк (char array_str[4028][1024] - например).
1
14 января 2013 года
kot_
7.3K / / 20.01.2000
а потом уже можно обрабатывать каждую строку - и находить в ней слова по указанным параметрам - теоретически таких слов в каждой строке может быть от 0 до длина строки - 2. В простейшем случае создаешь для таких слов второй массив (опять же в зависимости от языка - либо вектор, либо массив С-строк) - заполняешь его (так же сразу же можно запомнить номер строки для первого слова, и его индекс в строке, и то же самое для второго - в обычные переменные), выводишь. Затем сравниваешь первых два слова по размеру - если они одинаковые - хорошо, если нет - сохраняешь разницу (надо будет соответственно увеличить и уменьшить размер строк) - и выполняешь замену. Выводишь измененные строки. PROFIT. Можно еще сравнить слова - если они одинаковые - замены не выполняешь, и выводишь об этом сообщение.
1
14 января 2013 года
kot_
7.3K / / 20.01.2000
вот кстати пример простейшей обработки массивов строк - http://www.c-cpp.ru/books/massivy-strok
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог