Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 12.10.2010
Сообщений: 3

Поменять местами первое слово со вторым

22.12.2011, 18:44. Показов 1744. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Учимся сейчас программировать в UNIX. Такая вот проблема:

Задание: поменять местами первое слово со вторым.. 3 и 4 5 и 6 7 и 8

Я написал вот такой вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
int ldr2,ldr2new;
int main(int argc,char *argv[])
{
ldr2=open("lr2.txt",O_RDONLY);
ldr2new=creat("lr2new.txt",O_RDWR);
char a[200];
char b[200];
int i=0;int j=0;
char buff; 
while (read(ldr2,&buff,1)>0){
do {(read(ldr2,&buff,1));
    a[i]=buff;i++;}
while (buff!='\n');
 
do {(read(ldr2,&buff,1));
    b[j]=buff;j++;}
while (buff!='\n');
 
write(ldr2new,b,strlen(b));
write(ldr2new,a,strlen(a));
printf("%s",a);
printf("%i",i);
i=0;
j=0;}
close(ldr2);
close(ldr2new);
return (0);}
Но он не коректно выводит. А если перед первым и третим словом поставлю лишний пробел - то все ок. Кто-то знает в чем может быть проблема?
p.s. А ,еще, если написать while (buff!='\n');,то вообще выдает ошибку.
Спасибо
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2011, 18:44
Ответы с готовыми решениями:

В исходном текстовом файле первое слово поменять местами со вторым
Ребята, нужна помощь. Только начал изучать, помогите. как в си реализовать такую задачу. В исходном текстовом файле (создать и...

Поменять местами первое и второе слово строки
Ввести предложение и поменять местами его первые два слова. Я написал код, но мне он не очень нравиться. Как можна его оптимизировать? ...

Дано предложение. Поменять местами его первое и последнее слово
Не знаю как записать во вторую переменную последнее слово. Помогите пожалуйста :wall: #include &lt;stdio.h&gt; #include...

3
12 / 12 / 0
Регистрация: 31.10.2011
Сообщений: 35
22.12.2011, 21:01
Можно использовать только системные вызовы, библиотечные функции не подойдут?
0
0 / 0 / 0
Регистрация: 12.10.2010
Сообщений: 3
22.12.2011, 21:28  [ТС]
Цитата Сообщение от mikillskegg Посмотреть сообщение
Можно использовать только системные вызовы, библиотечные функции не подойдут?
Нужно обизательно использовать read и write(((
Я решил один и тот же файл открыть двумя дескрипторами. Теперь если каждое слово писать с нового рядка,то все нормально работает,а если по пробелу,то ничего не выводит(
Вот измененный код:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int ldr3,ldr2,ldr2new;
int main(int argc,char *argv[])
{
ldr2=open("lr2.txt",O_RDONLY);
ldr3=open("lr2.txt",O_RDONLY);
ldr2new=creat("lr2new.txt",O_RDWR);
char a[200];
char b[200];
int i=0;int j=0;
char buff; char buff2;
while (read(ldr3,&buff,sizeof(buff))!=EOF){ 
 
do {(read(ldr2,&buff,sizeof(buff)));
    a[i]=buff;i++;}
while (buff!=' ');
 
do {(read(ldr2,&buff,sizeof(buff)));
    b[j]=buff;j++;}
while (buff!=' ');
 
write(ldr2new,b,strlen(b));
write(ldr2new,a,strlen(a));
i=0;
j=0;
};
 
close(ldr2);
close(ldr2new);
return (0);}
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
31.01.2012, 23:22
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//~ меняет местами слова в тексте 1 и 2, 3 и 4, 5 и 6 и т.д.
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
 
#define MAX_WORD 256
 
int write_words(int *, char [], char []);
char *take_word(int *, char []);
 
int main(int argc, char **argv)
{
    char filename[MAX_WORD]="text.txt";
 
    //~ сюда запишем слова
    char first[MAX_WORD];       // первое
    char second[MAX_WORD];      // второе
    char to_change[MAX_WORD];   // буфер
    
    int fd;         // дескриптор
    int i=4;        // количество замен
 
    fd=open(filename, O_RDWR);
 
    while (i--) {
        //~ обнуляем массивы
        to_change[0]=first[0]=second[0]='\0';
        
        strcpy(first, take_word(&fd, to_change));
        if (first[0]  != '\0')
            strcpy(second, take_word(&fd, to_change));
        if (second[0] != '\0')
            write_words(&fd, first, second);
        else break;
    }
    
    close(fd);
    system("cat text.txt"); // это для проверки
 
    return 0;
}
 
//~ считывает слово из файла
char *take_word(int *fd, char return_word[])
{
    int i=0;
    unsigned char buf;
    while ( read(*fd, &buf, 1) > 0 )
    {
        //~ пока не пробел - читаем слово. 
        if ( !isspace(buf) ) {
            return_word[i]=buf;
            i++;
        } else {
            return_word[i]='\0';
            i++;
            return return_word;
        }
    }
    return '\0'; // конец файла
}
 
//~ записывает слова в файл в обратном порядке
int write_words(int *fd, char first[], char second[])
{
    off_t first_len=strlen(first);
    off_t second_len=strlen(second);
    off_t seek = first_len + second_len + 2;
    
    lseek(*fd, -1*seek, 1);     // переходим на два слова назад
    write(*fd, second, second_len); // записываем второе слово
    lseek(*fd, 1L, 1);      // переходит на символ вправо
    write(*fd, first, first_len);   // записываем первое слово
    lseek(*fd, 1L, 1);      // переходит на символ вправо
    
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.01.2012, 23:22
Помогаю со студенческими работами здесь

Строка символов. Поменять местами первое и последнее слово в строке
Есть задание: Дана строка символов. Поменять местами первое и последнее слово в строке. На сколько я понимаю, то должен быть массив...

Дано предложение. Поменять местами его первое и последнее слово
Часть 1. Дан числовой массив. Реализовать алгоритм сортировки подсчётом. Часть 2. Дано предложение. Поменять местами его первое и...

Поменять местами первое и последнее слово в строке без использования указателей
Как я понял нужно использовать пробел как разделитель слов, но как это реализовать я не знаю.

Поменять местами первое и последнее слово строки, если слова разделены пробелами
есть вот это, но что то помоему это не на с++ #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include...

Как поменять местами первое слово первой строки с предпоследним словом второй?
У меня получается только с сделать эти же действия, но в одной строке


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru