Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 28.10.2014
Сообщений: 36
1

Строки, работа с файлом. Реверс и циклический сдвиг в словах

19.02.2015, 10:16. Просмотров 1291. Ответов 8
Метки нет (Все метки)

Вот задание
Для произвольного текста(Взятого из файла), содержащего не более 10 строк, в каждой строке не более 80 символов, переставить буквы в каждом слове в обратном порядке для слов с нечетным количеством букв и сдвинуть циклический вправо на указанную пользователем величину для слов с четным количеством букв. Вывести полученный текст на экран.
Программа не работает, помогите исправить недочеты. Не знаю как исправить ошибку Const char В string
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 "stdlib.h" // Библиотека для использования макроса NULL
#include <string> // Библиотека для использования строк
#include <fstream> // Библиотека для Работы с файлами
#include <iostream> // Библиотека ввода вывода
using namespace std;// Пространство Имен std
 
int main()
{
    char *ourfile [10];
    char *vrem =new char [81];
    int shift;
    int a,k,i=0;
    cout<<"Enter count of shift:";
    cin>>shift;
    ifstream infile("1.txt");
    cout<<"\nInitial text:\n";
    while(getline(infile,vrem)&&i  i<10)
    {
        a=strlen(vrem);
        ourfile[i]=new char [a+1];
        strcpy(ourfile[i],vrem);
    }
    for (int i = 0; i < 80; i++)//Цикл завершится когда i будет больше string.size() т.е размер строки
    {
        char *cstr = new char[81];//Выделяем память по указатель размером строки +1
        strcpy(cstr, ourfile[i]);//В память, по расположению указателя cstr, копируется i-й элемент из вектора strings.
        char *c = strtok(cstr, " ");// // указатель указывает на первое слово строки(то что до первого пробела)
        while (c != 0) // Цикл с предусловием который завершиться если условие нарушится
        {
            string buf = (const char*) c;//Объявляется строковая переменная с именем buf, в которую заносится строка, хранящаяся по указателю c. 
            int mod = strlen(buf) % 2;// Объявляем переменую Мод и инициализируем её остатком от деления длины строки
            if (mod == 1)// Сравниваем MOD С 1 если остаток от деления равен единице то выполнять 
            {
                string str2 = buf;// Обявляем переменную Str2 И инициализируем ее BUf
                for (int i = 0; i < strlen(buf); i++)// Цикл с парамметром Объявляем переменную i и инициализируем её 0, Условие прерывания цикла если i< Длинны буферной длины; i++;
                    str2[strlen(buf) - 1 - i] = buf[i];//Сдвиг (Перебор)
                cout<<str2<<" ";// Вывод на экран str2
            }
            else // если не равен 1 
            {
                for (int cnt = 0; cnt < shift; cnt++)// цикл завершится когда cnt будет больше Shift т.е Сдвига введенного пользователем
                {
                    char b = buf[0];// Объявляем переменную b и инициализируем её 1 значением buf[0]
                    for (int j = 0; j < strlen(buf) - 1; j++)//Объявляется цикл по j от нуля до длины строки-буфера минус один.
                        buf[j] = buf[j + 1];// Сдвиг по столбцам
                    buf[strlen(buf) - 1] = b;// вставляем 1 символ для завершения переноса в правельном порядке
                }
                cout<<buf<<" ";// Выводим значение переменной buf на экран
            }
            c = strtok(NULL," ");// переходим к следующему слову
        }
    
    system("pause");
    delete[] vrem;
    delete[] ourfile;
    return 0;
 
}
Заранее благодарю
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2015, 10:16
Ответы с готовыми решениями:

Выполнить циклический сдвиг элементов каждой строки матрицы на количество позиций, равное номеру строки
Дана матрица целых чисел X(5х8). Выполнить циклический сдвиг элементов каждой строки матрицы на...

работа с текстовым файлом (убирать конечные буквы в словах)
программа должна убирать конечные буквы в словах. но у последнего слова почему-то не убирает. в...

В чем ошибка? Циклический сдвиг строки
Есть код. Нужно сделать циклический сдвиг строки..... а он меняет мне 1 и последнюю местами .(((...

Циклический сдвиг справа налево той строки массива
Добрый день... Пожалуйста, помогите решить задачи!!! Спасибо... 1. Дан двумерный массив...

8
6916 / 5981 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
19.02.2015, 10:27 2
Ты не верно вызываешь getline() для char[].
C++
1
infile.getline(vrem, 81)
1
0 / 0 / 0
Регистрация: 28.10.2014
Сообщений: 36
19.02.2015, 13:18  [ТС] 3
Спасибо а с переменно баф что сделать, ошибка в том что баф стринг он ругается что нельзя стринг в чар присвоить как это исправить?
0
6916 / 5981 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
19.02.2015, 14:02 4
В какой именно строке ошибка?
Лучше всего, если ты сделаешь программу либо на string, либо на char[]. Тогда не будет путаницы.
0
0 / 0 / 0
Регистрация: 28.10.2014
Сообщений: 36
19.02.2015, 14:12  [ТС] 5
Так вставь программу в компилятор да посмотри =)

Добавлено через 43 секунды
Не получится либо на том либо на том некоторые функции нужные мне тут на Char либо не работают либо я о них не знаю
0
6916 / 5981 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
19.02.2015, 15:05 6
Это
C++
1
strlen(buf)
везде замени на это:
C++
1
buf.length()
и после 21-й строки в конец цикла вставь ++i.
1
0 / 0 / 0
Регистрация: 28.10.2014
Сообщений: 36
19.02.2015, 16:29  [ТС] 7
И Все должно работать? А то у меня предупреждений очень много =(
0
6916 / 5981 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
19.02.2015, 16:51 8
Лучший ответ Сообщение было отмечено Sarum9n как решение

Решение

Ну синтаксических ошибок нет, а про сам алгоритм - тебе виднее.
1
0 / 0 / 0
Регистрация: 30.11.2017
Сообщений: 1
30.11.2017, 08:04 9
Sarum9n, Приветствую, подскажи, нашел решение проблемы? Если да, то какой код получился?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2017, 08:04

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Циклический сдвиг строки матрицы в зависимости от чётности минимального элемента
12. Дана матрица А. Если минимальный элемент строки матрицы четный, выполнить циклический сдвиг...

Работа с числами. Циклический сдвиг; уменьшение значения цифр, входящих в число
Визуальная среда delphi. _____ Раз: Дано целое число. Уменьшить каждую цифру этого числа на 1....

Работа с числами. Циклический сдвиг; уменьшение значения цифр, входящих в число.
Визуальная среда delphi. _____ Раз: Дано целое число. Уменьшить каждую цифру этого числа на 1....

Логический сдвиг влево,логический сдвиг вправо,алгоритм обмена двух переменных,циклический сдвиг
Битовые сдвиги.FW4,msstudio 13,на C# 1)Реализовать быстрое умножение на 2(логический сдвиг влево)...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.