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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
#1

Замена прописных букв строчными - C++

22.11.2011, 11:27. Просмотров 1072. Ответов 3
Метки нет (Все метки)

Всем привет!

Такая проблемка: вводим строку и, если после , или ; стоит прописная буква - заменяем эту букву на строчную. Написал такой код:

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
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
 
int main ()
{
    const int N = 255;
    int i=0, c;
    char str[N];
    while ((c = _getch()) != 13 && i<N) //13 = enter
    {
        if (c == 0 || c == 0xE0) 
            _getch();
 
        else if (isgraph(c)) 
        {
            _putch(c);
            str[i++]=c;
        }
    }
    i=0;
    char *s = str;
    while(*s++)
    {
        if((str[i] == ',' || str[i] == ';') && str[i++] != 0)
            str[i++] = tolower(str[i++]);
        ++i;
    }
 
    printf("%s ", str);
    return 0;
}
Тут не всё правильно (ибо вывод вообще какой-то корявый). Но разобраться мне самому не по силам.

Покажите, пжлст, где мои ошибки и варианты их исправлений.

Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2011, 11:27     Замена прописных букв строчными
Посмотрите здесь:

Нахождение и подсчет прописных букв C++
СИ: Вывод отдельно заглавных и прописных букв из строки C++
C++ Подсчитать слова, состоящие из латинских прописных букв.
поиск слов, состоящих из прописных букв C++
C++ Удалить из строки слова, состоящие только из прописных букв
C++ Сколько слов, состоящих только из прописных букв, содержится в сообщении
C++ Проверить является ли выражение состоящее только из ПРОПИСНЫХ букв палиндромом
C++ Буллеан (степень) множества латинских прописных букв
Перевод букв из прописных в строчные C++
Найти количество прописных букв в строке C++
Количество прописных букв в строке C++
C++ Преобразование всех строчных букв в прописные, а прописных — в строчные

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
22.11.2011, 11:51     Замена прописных букв строчными #2
не используй вложенный инкремент (неправильно сделано условие)
-=ЮрА=-
Заблокирован
Автор FAQ
22.11.2011, 12:03     Замена прописных букв строчными #3
amfisat, решил написать всё с нуля, т.к. разбирать Ваш код по косточкам не особо хотелось
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
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
 
int main()
{
    long i = 0;
    char chr, str[1024];
    printf("Enter string (less than 1024 chars)\n");
    //Ñ÷èòûâГ*ГҐГ¬ ñòðîêó Г± ïðîáåëГ*ìè, Гў chr - \n îò ââîäГ*
    scanf("%[^\n]%c",str,&chr);
    while(str[i + 1] != '\0')
    {
        if(str[i] == ',' || str[i] == ';')
        while(str[i] != '\0')
        {
            if(isalpha(str[i]))
            {
                if(isupper(str[i]))
                    str[i] = tolower(str[i]);
                break;
            }
            i++;
            
        }
        i++;
    }
    printf("Trasformed string\n%s\n",str);
    printf("Press any key to continue\n");
    _getch();
    return 0;
}
Enter string (less than 1024 chars)
Rdfgd, Thghj; sdfds; Afdsf, Ffdg; fgdf
Trasformed string
Rdfgd, thghj; sdfds; afdsf, ffdg; fgdf
Press any key to continue

Добавлено через 6 минут
PS:
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
scanf("%[^\n]%c",str,&chr);
- вот этой строкой мы заменяем весь Ваш цикл ввода
Цитата Сообщение от amfisat Посмотреть сообщение
while ((c = _getch()) != 13 && i<N) //13 = enter
* * * * {
* * * * * * * * if (c == 0 || c == 0xE0)
* * * * * * * * * * * * _getch();
else if (isgraph(c))
* * * * * * * * {
* * * * * * * * * * * * _putch(c);
* * * * * * * * * * * * str[i++]=c;
* * * * * * * * }
* * * * }
Ну а насчёт ошибок, думается вот здесь они кроются
Цитата Сообщение от amfisat Посмотреть сообщение
str[i++] != 0)
* * * * * * * * * * * * str[i++] = tolower(str[i++]);
- после запятой или точки с запятой идёт пробел, а может и несколько, поэтому нужно их "пропустить". Если не прибегать к спец функциям - сделать это проще всего в цикле
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(str[i] != '\0')
* * * * * * * * {
* * * * * * * * * * * * if(isalpha(str[i]))
* * * * * * * * * * * * {
* * * * * * * * * * * * * * * * if(isupper(str[i]))
* * * * * * * * * * * * * * * * * * * * str[i] = tolower(str[i]);
* * * * * * * * * * * * * * * * break;
* * * * * * * * * * * * }
* * * * * * * * * * * * i++;
}
amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
22.11.2011, 12:28  [ТС]     Замена прописных букв строчными #4
Класс, спасибо, буду разбираться.
Yandex
Объявления
22.11.2011, 12:28     Замена прописных букв строчными
Ответ Создать тему
Опции темы

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