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

Необходимо в последовательности символов переставить заданную букву со следующей за ней. - C++

Восстановить пароль Регистрация
 
antifreeze
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 48
04.02.2014, 10:24     Необходимо в последовательности символов переставить заданную букву со следующей за ней. #1
Всем привет! Кто может помогите. Необходимо в последовательности символов переставить заданную букву tt со следующей за ней.
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
#include <stdio.h>
#include <conio.h>
main()
{
    int m;
    char stroka[64]={0}, c1, tt;
    printf("\nInput symbol: "); // Вводим символ
    scanf("%c",&tt);
    printf("\nInput number: "); //Вводим количество элементов строки
    scanf("%d",&m);
    for (int a=0;a<m;a++)      {
       printf("\n Input %d symbol:",a);
       scanf("%c",&c1);
       if(c1==tt && a>0)       {
       stroka[a]=stroka[a-1];
       stroka[a-1]=tt;
       }
    }
 
    for (int i=0;i<=10;i++)      {  //Вывод получившегося массива
    printf("%c ",stroka[i]);
    }
    getch();
}
Написал такой код, но когда начинает работать цикл, он почему то за 1 заход проходит 2 раза вместо одного и заменяется с предыдущим символом.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2014, 10:24     Необходимо в последовательности символов переставить заданную букву со следующей за ней.
Посмотрите здесь:

Необходимо провести анализ следующей последовательности данных: C++
Вывод фамилий, начинающихся на заданную букву C++
Разработать функцию, которая меняет слова, содержащие заданную комбинацию символов, на соответствующее количество символов # C++
Подсчитать количество слов, содержащих заданную букву C++
Напечатать последовательность, удалив из слов заданную букву C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
04.02.2014, 10:34     Необходимо в последовательности символов переставить заданную букву со следующей за ней. #2
Начнем с того что строку или вернее массив stroka вы ни как не заполняете, кроме как нулями в начале и в if когда введенный символ совпадает с tt. Тогда вам проще всю строку символом tt заполнить. И еще ваш цикл начинается с 0 ну а если сразу будет введен символ совпадающий с tt, тогда будет обращение в stroka по индексу -1, то есть stroka[-1] что вызовет крах программы.

Хотя заметил что у вас стоит проверка на a>0 не знаю зачем она, не проще ли в цикле сразу написать a=1
antifreeze
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 48
04.02.2014, 11:30  [ТС]     Необходимо в последовательности символов переставить заданную букву со следующей за ней. #3
Исправил, но цикл также повторяется по 2 раз за 1 заход. Что делать?
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
#include <stdio.h>
#include <conio.h>
main()
{
    int m;
    char stroka[64]={0}, c1, tt;
    printf("\nInput symbol: "); // Вводим символ
    scanf("%c",&tt);
    printf("\nInput number: "); //Вводим количество элементов строки
    scanf("%d",&m);
    for (int a=0;a<m;a++)      {
       printf("\n Input %d symbol:",a);
       scanf("%c",&c1);
       if(stroka[a-1]==tt && a>=1)       {
       stroka[a-1]=stroka[a];
       stroka[a]=tt;
       } else   {
       stroka[a]=c1;
       }
    }
 
    for (int i=0;i<m;i++)      {  //Вывод получившегося массива
    printf("%c ",stroka[i]);
    }
    getch();
}
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
04.02.2014, 11:46     Необходимо в последовательности символов переставить заданную букву со следующей за ней. #4
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
#include <algorithm>
#include <iostream>
#include <string>
 
int main()
{
    std::string userString;
    std::cout << "Input the string: " << std::endl;
    std::getline(std::cin, userString);
 
    char userLetter;
    std::cout << "Letter: ";
    std::cin >> userLetter;
 
    for (size_t i = 0; i < userString.length() - 1; i++) {
        if (userString.at(i) == userLetter) {
            std::swap(userString.at(i), userString.at(i + 1));
            i++;
        }
    }
    std::cout << "Result: " << std::endl << userString << std::endl;;
 
    std::system("pause");
    return 0;
}
antifreeze
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 48
04.02.2014, 12:03  [ТС]     Необходимо в последовательности символов переставить заданную букву со следующей за ней. #5
Ev[G]eN, спасибо, а можно чтобы с обычными функциями printf и scanf?
antifreeze
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 48
04.02.2014, 12:09  [ТС]     Необходимо в последовательности символов переставить заданную букву со следующей за ней. #6
Ev[G]eN, ты в программе сразу вводишь строку, а можно сделать так чтобы строка вводилась постепенно, а не целиком вся? возможно ли вообще такое?
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
04.02.2014, 12:13     Необходимо в последовательности символов переставить заданную букву со следующей за ней. #7
antifreeze, но зачем?
antifreeze
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 48
04.02.2014, 12:16  [ТС]     Необходимо в последовательности символов переставить заданную букву со следующей за ней. #8
Ev[G]eN, я знаю что это бред, но надо именно так, поможешь?
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
04.02.2014, 12:19     Необходимо в последовательности символов переставить заданную букву со следующей за ней. #9
Цитата Сообщение от antifreeze Посмотреть сообщение
Ev[G]eN, спасибо, а можно чтобы с обычными функциями printf и scanf?
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
#include <string.h>
#include <stdio.h>
#include <conio.h>
 
#define maximalStringLength 256
 
int main(void)
{
    char string[maximalStringLength];
    printf("Input the string: \n");
    gets(string);
 
    char letter;
    printf("Input the letter: ");
    scanf("%c", &letter);
 
    int i;
    for (i = 0; i < strlen(string) - 1; i++) {
        if (string[i] == letter) {
            char buffer = string[i];
            string[i] = string[i + 1];
            string[i + 1] = buffer;
            i++;
        }
    }
    printf("Result: \n");
    puts(string);
    _getch();
 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 12:31     Необходимо в последовательности символов переставить заданную букву со следующей за ней.
Еще ссылки по теме:

C++ Вывести слово, начинающееся на заданную букву
C++ Определить, сколько слов оканчивается на заданную букву
Составить программу для кодирования некоторого текста до 50 символов, заменяя каждую букву на пятую после нее букву из а C++

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

Или воспользуйтесь поиском по форуму:
antifreeze
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 48
04.02.2014, 12:31  [ТС]     Необходимо в последовательности символов переставить заданную букву со следующей за ней. #10
Ev[G]eN, а можешь, чтобы строка вводилась в цикле постепенно?
Yandex
Объявления
04.02.2014, 12:31     Необходимо в последовательности символов переставить заданную букву со следующей за ней.
Ответ Создать тему
Опции темы

Текущее время: 16:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru