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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
antifreeze
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 48
#1

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

04.02.2014, 10:24. Просмотров 466. Ответов 9
Метки нет (Все метки)

Всем привет! Кто может помогите. Необходимо в последовательности символов переставить заданную букву 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 раза вместо одного и заменяется с предыдущим символом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2014, 10:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Необходимо в последовательности символов переставить заданную букву со следующей за ней. (C++):

Шифрование: заменить каждую украинскую букву следующей за ней по алфавиту - C++
Чтобы зашифровать текст, записанный с помощью русских букв и знаков препинания, его можно переписать, заменив каждую букву непосредственно...

Расшифровка файла: каждая русская буква заменяется на букву того же регистра, следующей за ней - C++
Задание : Создать текстовый файл, который содержит зашифрованный текст, введенный с клавиатуры. При этом каждая русская буква заменяется на...

Необходимо провести анализ следующей последовательности данных: - C++
Добрый день уважаемые профи. Необходимо провести анализ следующей последовательности данных: 000004 D3EA9 000005 6620E 004096...

В текстовом файле поменять каждую букву "а" на букву, заданную пользователем - C++
Дан текстовый файл, поменять в нем букву &quot;а&quot; на задаваемую пользователем.

Заменить каждую букву русского алфавита следующей за ней по алфавиту - C (СИ)
В тексте заменить каждую букву русского алфавита следующей за ней по алфавиту

Заменить каждую букву текста непосредственно следующей за ней по алфавиту - Turbo Pascal
Чтобы зашифровать текст, записанный с помощью русских букв и знаков препинания, его можно переписать, заменив каждую букву непосредственно...

9
ShadowFirst
55 / 48 / 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
0
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();
}
0
Ev[G]eN
iOS/Android Developer
Эксперт С++
5097 / 1535 / 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;
}
1
antifreeze
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 48
04.02.2014, 12:03  [ТС] #5
Ev[G]eN, спасибо, а можно чтобы с обычными функциями printf и scanf?
0
antifreeze
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 48
04.02.2014, 12:09  [ТС] #6
Ev[G]eN, ты в программе сразу вводишь строку, а можно сделать так чтобы строка вводилась постепенно, а не целиком вся? возможно ли вообще такое?
0
Ev[G]eN
iOS/Android Developer
Эксперт С++
5097 / 1535 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
04.02.2014, 12:13 #7
antifreeze, но зачем?
0
antifreeze
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 48
04.02.2014, 12:16  [ТС] #8
Ev[G]eN, я знаю что это бред, но надо именно так, поможешь?
0
Ev[G]eN
iOS/Android Developer
Эксперт С++
5097 / 1535 / 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;
}
1
antifreeze
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 48
04.02.2014, 12:31  [ТС] #10
Ev[G]eN, а можешь, чтобы строка вводилась в цикле постепенно?
0
04.02.2014, 12:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 12:31
Привет! Вот еще темы с ответами:

Зашифруйте текст, заменив каждую букву непосредственно следующей за ней по алфавиту - Turbo Pascal
Зашифруйте текст, записанный с помощью русских букв и знаков препинания, заменив каждую букву непосредственно следующей за ней по алфавиту....

Дана строка символов. Замените в ней букву а на букву о до первой точки - Pascal ABC
Дана строка символов. Замените в ней букву а на букву о до первой точки.

В исходной строке а$ заменить все вхождения заданной последовательности символов x$ на другую заданную последовательность символов y$ - QBasic
В исходной строке а$ заменить все вхождения заданной последовательности символов x$ на другую заданную последовательность символов y$.

Подсчитать, сколько слов последовательности содержат заданную букву - Pascal ABC
Подсчитать, сколько слов в последовательности в которых содержится буква (к примеру, &quot;а&quot;)


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

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

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