Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Дана строка. Поменять местами первое слово со вторым, третье с четвертым и т.д. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Даны a,b. Вычислить a*b, используя +,-,=,<>. http://www.cyberforum.ru/cpp-beginners/thread196784.html
Помогите решить задачку: Даны натуральные числа a,b. Вычислить произведение a*b, используя в программе лишь операции +,-,=,<>.
C++ Изменение значений в Grid View Grid View заполнен значениями различных массивов. Когда окно в рабочем состоянии в Grid View можно изменять значения в ячейках. Хочу сделать, чтобы значения также изменялись в массиве, примерно так:... http://www.cyberforum.ru/cpp-beginners/thread196780.html
C++ Данные трокового типа(string).Криптография
Придумать и описать свой способ кодирования текста. Составить простую программу для введения текста (данное типа string до 255 символов), его кодирования и вывода результата.
C++ Работа с файлами
Есть файл file.txt и он содержит 3 числа, розделенных пробелом, например, 3 2 0.1 Как считать информацию с файла и записать эти числа в отдельные переменные или масив? Спасибо!!!
C++ Одномерный массив http://www.cyberforum.ru/cpp-beginners/thread196721.html
В одномерном массиве, состоящем из п целых элементов, вычислить: 1) номер максимального элемента массива; 2) произведение элементов массива, расположенных между первым и вторым нулевыми...
C++ Смысл выражения x%2 Здравствуйте. Помогите разобраться с кодом. Я только начинаю изучать C++. Просматриваю примеры кодов из раздела "Задача для лучшего понимания" форума. Вопрос следующий: что означает строка ... подробнее

Показать сообщение отдельно
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
25.11.2010, 22:17
Препроцессор. Когда программа будет компилироваться (вернее чуть раньше, перед этим), все вхождения N в коде будут заменены на 80. Если пишите в Плюсах, можно сказать, это аналог const int N = 80;

Добавлено через 33 минуты
Второе. Только, чувствую, намудрил страшно...

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
#define N 80
 
int swapTwoWords(char *str)
{
    char *word1, *word2; // Каждое из слов пары
    int n, m;            // Длины слов
    int tn;              // Временный счётчик
    int i;
 
    tn = 0;
 
    // Считаем длину первого слова
    while (str[tn] != ' ' && str[tn] != '\0')
        tn++;
 
    if (str[tn] == '\0')
        return 1;
 
    n = tn;
 
    // Выделяем память под первое слов
    word2 = (char *)malloc(n * sizeof(char));
 
    // Пропускаем пробелы между первым и вторым словом
    while (str[tn] == ' ')
        tn++;
 
    m = tn;
 
    // Считаем длину второго слова
    while (str[m] != ' ' && str[m + 1] != '\0')
        m++;
 
    m -= tn;
 
    // Выделяем память под второе слово
    word1 = (char *)malloc(m * sizeof(char));
 
    // Копируем первое слово из исходной строки
    for (i = 0; i < n; i++)
        word2[i] = str[i];
 
    // Копируем копируем слово из исходной строки
    for (i = 0; i < m; i++)
        word1[i] = str[i + tn];
 
    // Копируем второе слово в исходную строку на место первого
    for (i = 0; i < n; i++)
        str[i] = word1[i];
 
    // Копируем первое слово в исходную строку на место второго
    for (i = 0; i < m; i++)
        str[i + tn] = word2[i];
 
    // Освобождаем память
    free(word1);
    free(word2);
 
    return 0;
}
 
void swapAllWords(char *str)
{
    int len;
    int i;
 
    // Считаем длину строки
    len = strlen(str) + 1;
 
    // Идём по строке
    for (i = 1; i < len; i++)
    {
        // меняем очередную пару
        swapTwoWords(str + i - 1);
 
        // Пропускаем первое слово только что обмененной пары
        while (str[i] != ' ' && str[i] != '\0')
            i++;
 
        // Пропускаем пробелы между первым и вторым словом пары
        while (str[i] == ' ')
            i++;
 
        // Пропускаем второе слово пары
        while (str[i] != ' ' && str[i] != '\0')
            i++;
 
        // Пропускаем пробелы межды этой парой и следующей
        while (str[i] == ' ')
            i++;
    }
}
 
int main(void)
{
    char *str; // Будущая строка
 
    // Выделяем память под строку
    str = (char *)malloc(N * sizeof(char));
 
    printf("Enter string:\n");
    
    // Вводим строку
    fgets(str, N, stdin);
 
    // Преобразуем строку
    swapAllWords(str);
 
    // Выводим преобразованную строку
    printf("Result string:\n%s", str);
 
    free(str);
 
    return 0;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru