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

Функция для обработки строк - C++

Восстановить пароль Регистрация
 
sword7i
3 / 3 / 0
Регистрация: 25.09.2012
Сообщений: 92
17.03.2013, 20:13     Функция для обработки строк #1
Добрый вечер. Помогите пожалуйста с функциями для обработки строк. Нужно написать три функции:
  1. Функция void delNsymbl TCHAR* str, int n) получает строку, число n и удаляет из строки первые n символов.
  2. Функция TCHAR* poisk1BigAlfa (TCHAR* str), получив строку, ищет в ней адрес первого прописного буквенного латинского символа, за которым следует или перед которым стоит его строчный символ. Если таких символов нет, функция возвращает адресный 0.
  3. Функция int smallSymb(TCHAR* str) получает строку str и удаляет прописные символы, если они дублируют рядом стоящий строчный символ. Функция возвращает количество удаленных символов. Используйте при разработке алгоритма функции функции delNsymbl и poisk1BigAlfa.
С первой функцией мне все понятно, вот что у меня получилось (проверьте пожалуйста)
C++
1
2
3
4
5
6
7
8
9
#include <stdafx.h>
#include <string.h>
#include <ctype.h>
#define TCHAR char
 
void delNsymbl (TCHAR* str, int n)
{
    for (TCHAR* p=str+n;*str=*p;str++,p++);
}
Вторая вышла нерабочая и очень корявая:
C++
1
2
3
4
5
6
7
8
9
10
11
TCHAR* poisk1BigAlfa (TCHAR* str)
{
    TCHAR* BigA;
    for (int p=0;*(str+p)=='\0';p++)
    {
        if ((*(str+p)==*(str+p+1) && islower(*(str+p+1))) || (*(str+p)==*(str+p-1) && islower(*(str+p-1))))
        BigA=str+p;
        return BigA;
    }
        return 0;
}
Ну а за третью даже не брался, т.к. для ее работы требуются первая и вторая функции.
Мужики, выручайте!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
17.03.2013, 21:02     Функция для обработки строк #2
Цитата Сообщение от sword7i Посмотреть сообщение
for (TCHAR* p=str+n;*str=*p;str++,p++);
Сами придумали или где увидели?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char* poisk1BigAlfa (char* str)
{
   int dif = abs('a' - 'A');
 
   for (int p=0;*(str+p)=='\0';p++)
   {
      if (abs(str[p] - str[p+1]) == dif)
      {
         if (isupper(str[p])
            return str[p];
         else
            return str[p+1];
      }
   }
 
   return 0;
}
Добавлено через 5 минут
Цитата Сообщение от sword7i Посмотреть сообщение
(*(str+p)==*(str+p+1) && islower(*(str+p+1)))
Кстати коды прописных букв не равны кодам тех же строчных букв.
sword7i
3 / 3 / 0
Регистрация: 25.09.2012
Сообщений: 92
17.03.2013, 22:08  [ТС]     Функция для обработки строк #3
Цитата Сообщение от kazak Посмотреть сообщение
Сами придумали или где увидели?
Сам дошел до этого, но изначально кода было больше.
Большое спасибо за функцию, сначала подумал причем здесь английская 'A', но затем понял, что невнимательно прочитал задание (думал, что для всех букв нужно искать данный случай). Теперь буду пытаться сделать третью функцию.

Добавлено через 25 минут
kazak, все-таки, мне кажется, что под адресом "первого прописного буквенного латинского символа" подразумевается не первый символ алфавита 'A', а первый по счету (любой) латинский символ перед или после которого стоит его маленький собрат.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
18.03.2013, 00:02     Функция для обработки строк #4
Цитата Сообщение от sword7i Посмотреть сообщение
все-таки, мне кажется, что под адресом "первого прописного буквенного латинского символа" подразумевается не первый символ алфавита 'A', а первый по счету (любой) латинский символ перед или после которого стоит его маленький собрат.
Буквы в компьютере кодируются числами, прописные буквы имеют свой числовой код, строчные свой. Буквы кодируются последовательно (по крайней мере латинские), в следствии чего разница между кодом прописной и кодом строчной для каждой буквы будет одинаковой. Как раз строчка
Цитата Сообщение от kazak Посмотреть сообщение
C++
1
int dif = abs('a' - 'A');
всего лишь вычисляет данную разность.
Для просвещения http://ascii.org.ru/ascii.pdf
Yandex
Объявления
18.03.2013, 00:02     Функция для обработки строк
Ответ Создать тему
Опции темы

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