0 / 0 / 0
Регистрация: 15.10.2014
Сообщений: 3
1

Изменить текст, используя "struct" в c++

15.10.2014, 17:56. Показов 429. Ответов 3
Метки нет (Все метки)

Здравствуйте. У меня есть следующий стих:

A swarm of bees in May
Is worth a load hey;
A swarm of bees in June
Is worth a silver spoon;
A swarm of bees in July
Is hot a worth a fly.

И я должен изменить этот текст, так чтобы все линии закончились в одном и том же положении.
Недостаточное количество позиций в строке дополнить пробелами, распределив их равномерно между словами строки

Я знаю, что мой код очень громоздкий, но я должен использовать структуру в своем коде
Как мне найти самую длинную строку и добавить пробелы в другие, чтобы выполнить задачу?
Спасибо!

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
#include "stdafx.h"
#include "iostream"
#include <string.h> 
using namespace std;
 
struct VERSE {
    char row_one[25];
    char row_two[25];
    char row_three[25];
    char row_four[25];
    char row_five[25];
    char row_six[25];
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    struct VERSE v;
    strcpy_s(v.row_one, "A swarm of bees in May");
    strcpy_s(v.row_two, "Is worth a load hey;");
    strcpy_s(v.row_three, "A swarm of bees in June");
    strcpy_s(v.row_four, "Is worth a silver spoon;");
    strcpy_s(v.row_five, "A swarm of bees in July");
    strcpy_s(v.row_six, "Is hot a worth a fly.");
    cout << v.row_one << endl << v.row_two << endl << v.row_three << endl
        << v.row_four << endl << v.row_five << endl << v.row_six << endl;
 
    cout << strlen(v.row_one) << endl;
    cout << strlen(v.row_two) << endl;
    cout << strlen(v.row_three) << endl;
    cout << strlen(v.row_four) << endl;
    cout << strlen(v.row_five) << endl;
    cout << strlen(v.row_six) << endl;
 
    //the length of row
    /*
    int length = 0;
    for(int i = 0; v.row_two[i] != '\0'; i++) {
        length++;
    }
    printf("Length of second row is: %d\n", length);
    */
 
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.10.2014, 17:56
Ответы с готовыми решениями:

При компиляции ошибка: C2228: left of ".real",".imag" must have struct/class/union
Помогите, пожалуйста! Компилирую в VS2010... Ошибка: C2228: left of &quot;.real&quot;,&quot;.imag&quot; must have...

Структура: error C2079: "A::myElem" использует неопределенный struct "A::B"
class A { public: struct B; private: B myElem; }; struct A::B {

Вывести текст файла, заменив цифры от 0 до 9 на слова "ноль", "один"."девять", начиная каждое предложение с новой строки
Написать программу, которая считывает текст из файла и выводит его на экран, заменив цифры от 0 до...

Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков "+", "-", "*".
Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой...

3
117 / 114 / 65
Регистрация: 18.09.2014
Сообщений: 337
15.10.2014, 18:23 2
andru2012, находите максимальную длину строки, затем используете setw(maxLength)
Как пример:
C++
1
cout << setw(10) << firstLine << endl; // выделяет под следующее значение 10 символов
0
Модератор
Эксперт С++
12088 / 9763 / 5906
Регистрация: 18.12.2011
Сообщений: 26,213
15.10.2014, 18:34 3
Цитата Сообщение от Гоблин-инженер Посмотреть сообщение
setw(maxLength)
Разве это позволит равномерно распределить слова?
Просто строка прижмется к правой или левой границе этого поля.
0
117 / 114 / 65
Регистрация: 18.09.2014
Сообщений: 337
15.10.2014, 19:44 4
zss, ах да, я не заметил условия, что пробелы должны быть равномерно распределены между словами. Сглупил, сейчас попробую реализовать идею

Добавлено через 1 час 2 минуты
andru2012, что то типа этого получится. Не исключено, что где то есть ошибки, но ваш пример решается корректно
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
#include <cstdlib>
#include <iostream>
#include <string>
 
using namespace std;
 
void add_spaces(string &text, int max_length)
{
    int ln = text.length(), pr = max_length-ln;
    if (pr == 0) return; // Åñëè äîáàâëÿòü ïðîáåëû íå òðåáóåòñÿ, ïðîñòî âûõîäèì
    int spaces = 0;
    for (int i = 0; i < ln; ++i)
        if (text[i] == ' ') spaces++;
    string buff = "";
    for (int i = 0; i < (int)pr/spaces; ++i) buff += " ";
    int counter = -1;
    string sub = (pr%spaces != 0 ? " ": "");
    while (++counter < text.length())
    {
        if (text[counter] == ' ')
        {
            if (--pr >= 0)
            {
                text.insert(counter, buff+sub);
                counter += buff.length()+sub.length();
            }
            else
            {
                text.insert(counter, buff);
                counter += buff.length();
            }
        }
    }
}
 
int main(int argc, char *argv[])
{
    const int count = 6;
    string text[6] = {"A swarm of bees in May",
                      "Is worth a load hey;",
                      "A swarm of bees in June",
                      "Is worth a silver spoon;",
                      "A swarm of bees in July",
                      "Is hot a worth a fly."};
    int max = text[0].length();
    for (int i = 0; i < count; ++i)
        if (max < text[i].length()) max = text[i].length();
    for (int i = 0; i < count; ++i)
    {
        add_spaces(text[i], max);
    }
    for (int i = 0; i < count; ++i)
    {
        cout << text[i] << endl;
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2014, 19:44
Помогаю со студенческими работами здесь

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;,...

я задал произвольный текст длинной 5 строк, и допустим что я ввел 5 раз букву "П" , какой цикл нужно создать чтобы пометять букву "П" на букву "Р" ?
я задал произвольный текст длинной 5 строк, и допустим что я ввел 5 раз букву &quot;П&quot; , какой цикл...

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов), которые разделяются...

Отсортировать struct. (дайте тест, который "сломает" мой код)
Выведите фамилии и имена учащихся в порядке убывания их среднего балла. Входные данные Заданы...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru