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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
amfisat
 Аватар для amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
22.11.2011, 11:27     Замена прописных букв строчными #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
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++ Подсчитать, сколько было введено: латинских прописных букв, кириллических прописных букв, цифр, знаков переноса, прочих символов.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 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
 Аватар для amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
22.11.2011, 12:28  [ТС]     Замена прописных букв строчными #4
Класс, спасибо, буду разбираться.
Yandex
Объявления
22.11.2011, 12:28     Замена прописных букв строчными
Ответ Создать тему
Опции темы

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