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

где моя ошибка? слова на чет-х местах переписать задом наперед

24.11.2019, 12:07. Показов 1280. Ответов 9
Метки си (Все метки)

Вот мой код, но где ошибка? Основная идея была - пробег по строке, если нашли слово, то дальше цикл определяет-четное оно или нет, если четное-то он переписывает задом наперед (читает это слова с конца и вводит его буквы в буфер), и выводим потом все это.. Но что-то пошло не так
// в тексте слова стоящие на четных местах переписать задом наперед
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
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>//модификатор, который описывает стат поля и метоы класса
#include<conio.h>
int main()
{
    char stroka[255] = "skoro zima sneg elka mandarin podarki.";
    char* slv = 0;
    int k = 0; //счетчик слов
    int ks = 0; // количество слов
    int d = 0; //количество слов наоборт
    for (int i = 0; i < n; i++) // цикл по всей строке
    {
        if (stroka[i] != ' ') //если нашли слово
        {
            k++; //увеличивает счетчик слов
            if (k % 2 == 0) //если значение счетчика четно
            {
                for (int i = 0; stroka[i] != ' '; i++) //количество сиволов в четном слове
                {
                    ks++; // считает количесвто символов кажого четного слова в строке 
                }
                for (int i = 0; i < ks; i--) //выводим список слов наоборот
                {
                    d++;
                }
            }
        }
        printf("\n");
        printf("v %s", ks);
        printf("v %s", d);
        _getch();
        return 0;
    }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2019, 12:07
Ответы с готовыми решениями:

Переписать заданные пользователем слова, стоящие на нечетных местах, задом наперёд
Вообщем, есть программа, которая переписывает слова, стоящие на нечетных местах задом наперед....

В тексте слова, стоящие на четных местах, переписать задом наперед. В тексте несколько строк.
Задание: освоить обработку строк и работу с файлами средствами языка Си. Исходный текст должен...

Все слова, расположенные на четных местах, записать задом наперед
Прошу помощи... Дано предложение. Все слова, расположенные на четных местах, записать задом...

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

9
1827 / 1169 / 501
Регистрация: 14.10.2018
Сообщений: 3,177
24.11.2019, 14:31 2
Лучший ответ Сообщение было отмечено antonvladi как решение

Решение

antonvladi, Ваши ошибки
1) Обратились не на тот раздел. Это C# а вам надо C++ или C. Судя по коду, это все такие C.
2) #define _CRT_SECURE_NO_WARNINGS зачем данный макрос ?
3) char stroka[255] задавать столько символов, и записать всего 37 + 1. Можно проще и экономнее. Компилятор сам посчитает
C++
1
char stroka[] = "Текст";
4) char* slv. Объявлено, но нигде не используется.
5) for (int i = 0; i < n; i++) Это вообще не компилируется. Откуда n взялось ?
6) if (stroka[i] != ' ') проверка только на пробел, а как же остальные знаки запятая, двоеточие, восклицательный знак, точка и другие?
7) k++; //увеличивает счетчик слов это вы увеличиваете не кол-во слов, а кол-во букв
8) d++; //выводим список слов наоборот вывод через через printf() а не увеличиванием индексатора
9) printf("v %s", ks); буква 'v' в строке - это что ?
10) _getch(); return 0; вынести за цикл

Я давно не кодил на Си и C++ , может мой пример не лучший с точки зрения хорошего кода, но он рабочий
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
#include <stdio.h>
#include <string.h>
#include <conio.h>
 
bool IsLetter(char ch)
{
    if ((ch >= 'a' && ch <= 'z') ||
        (ch >= 'A' && ch <= 'A'))
        return true;
    return false;
}
 
void PrintWord(char *start, char *end)
{
    if (start == NULL) return;
    for (; start != end + 1; start++)
        printf("%c", *start);
}
 
void PrintWordReverse(char *start, char *end)
{
    if (start == NULL) return;
    for (; end != start - 1; end--)
        printf("%c", *end);
}
 
int main()
{
    char str[] = " !!!skoro zima sneg elka mandarin podarki.";
    printf("%s\n", str);
 
    char *startWord = NULL, *endWord = NULL;
    bool word = false;
    int countWord = 0;
    for (int i = 0; str[i] != '\0'; i++)
    {
        if (IsLetter(str[i]))
        {
            if (!word)
            {
                startWord = &str[i];
                countWord++;
            }
            endWord = &str[i];
            word = true;
        }
        else
        {
            if (countWord % 2 == 0)
                PrintWordReverse(startWord, endWord);
            else
                PrintWord(startWord, endWord);
            word = false;
            printf("%c", str[i]);
        }
    }
    _getch();
    return 0;
}
0
1 / 1 / 1
Регистрация: 06.09.2019
Сообщений: 28
25.11.2019, 16:38  [ТС] 3
Enifan, спасибо большое!
Не могли бы вы объяснить, что значат эти строчки
C++
1
2
3
4
5
6
7
8
9
10
11
12
void PrintWord(char *start, char *end)
{
    if (start == NULL) return;
    for (; start != end + 1; start++)
        printf("%c", *start);
}
 
void PrintWordReverse(char *start, char *end)
{
    if (start == NULL) return;
    for (; end != start - 1; end--)
        printf("%c", *end);
0
1827 / 1169 / 501
Регистрация: 14.10.2018
Сообщений: 3,177
25.11.2019, 16:52 4
На пост №3 отвечено личным сообщением
1
1 / 1 / 1
Регистрация: 06.09.2019
Сообщений: 28
25.11.2019, 19:00  [ТС] 5
Прошу меня извинить, что еще раз спрашиваю.. Не могли бы вы объяснить эту строчку
C++
1
2
3
4
5
6
7
8
9
if (IsLetter(str[i])) 
        {
            if (!word) 
            {
                startWord = &str[i];
                countWord++;
            }
            endWord = &str[i];
            word = true;
И почему ставится &?((
0
1827 / 1169 / 501
Регистрация: 14.10.2018
Сообщений: 3,177
25.11.2019, 19:16 6
Цитата Сообщение от antonvladi Посмотреть сообщение
Прошу меня извинить
Извиняться не надо, тут каждый день спрашивают как начинающие так и опытные форумчане. Форум для этого и был создан чтобы задавать вопросы и получать ответы.

Цитата Сообщение от antonvladi Посмотреть сообщение
if (IsLetter(str[i]))
это функция, которая проверяет, является ли данный символ в строке буквой

булевая переменная word здесь присутствует для логики, она помогает определить начало слова. Если word == false, значит начало слова мы еще не нашли.
countWord - кол-во найденных слов

Цитата Сообщение от antonvladi Посмотреть сообщение
endWord = &str[i];
смещаем указатель каждый раз, пока не будет достигнут конец строки

Цитата Сообщение от antonvladi Посмотреть сообщение
И почему ставится &?
а вот это вам надо изучать тему указателей. Если переменная хранит значение, то указатель хранит адрес. При указания символа & мы получаем не значение, а адрес.

Если честно, вам бы потренировать на простых примерах по логике и по указателям, тогда такие задачки будут элементарным занятием
0
1 / 1 / 1
Регистрация: 06.09.2019
Сообщений: 28
26.11.2019, 14:01  [ТС] 7
А что именно выполняет эти функции
(;, start!=end+1;start++)
(; end!=start-1;end--)
И почему мы ставим; в перед?
0
1827 / 1169 / 501
Регистрация: 14.10.2018
Сообщений: 3,177
26.11.2019, 14:05 8
Цитата Сообщение от antonvladi Посмотреть сообщение
А что именно выполняет эти функции
проходимся указателями по слову
Цитата Сообщение от antonvladi Посмотреть сообщение
И почему мы ставим; в перед?
это цикл for, так он работает, он разделен на три блока, первый нам не нужен, но точку с запятой обязательно надо ставить
0
1 / 1 / 1
Регистрация: 06.09.2019
Сообщений: 28
26.11.2019, 14:14  [ТС] 9
Если начало слово не равно концу, то идём дальше
И если конечное слово не равно началу, то идём влево

Добавлено через 6 минут
Или. Я не так понимаю?
0
1827 / 1169 / 501
Регистрация: 14.10.2018
Сообщений: 3,177
26.11.2019, 17:14 10
Цитата Сообщение от antonvladi Посмотреть сообщение
Если начало слово не равно концу, то идём дальше
И если конечное слово не равно началу, то идём влево
все верно, единственное что я добавил +1, чтобы слово целиком вывелось
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2019, 17:14

Переписать исходный текстовый файл в результирующий переворачивая все слова задом наперед
Осталась последняя лабораторная, но у меня никак не получается написать программу... Задача: Файл...

Подпрограммы: Требуется второе слово переписать задом наперед
Дана строка символов. Группы символов, разделенные пробелами и не содержащие пробелов внутри себя,...

Переписать исходный текстовый файл в результирующий задом наперед
Написать программу, которая переписывает исходный текстовый файл в результирующий задом наперед....

Переписать строку задом наперед, удалив из нее цифры и пробелы
Дана символьная строка, содержащая русские буквы , цифры, пробелы. Написать строку задом наперед,...


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

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

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