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

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

Войти
Регистрация
Восстановить пароль
 
sword7i
3 / 3 / 0
Регистрация: 25.09.2012
Сообщений: 92
#1

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

17.03.2013, 20:13. Просмотров 953. Ответов 3
Метки нет (Все метки)

Добрый вечер. Помогите пожалуйста с функциями для обработки строк. Нужно написать три функции:
  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;
}
Ну а за третью даже не брался, т.к. для ее работы требуются первая и вторая функции.
Мужики, выручайте!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2013, 20:13     Функция для обработки строк
Посмотрите здесь:

Функция обработки строк C++
C++ нужна функция для обмена строк двумерного массива на плюсах
C++ Функция для обработки строк
Дружественная функция для сравнения строк C++
C++ Создать функцию для обработки символьных строк. За образец брать библиотечные функции обработки строк языка С, но не применять их в своей функции
C++ Шаблонная функция для чтения целых чисел, дробных, строк из файла
C++ Использование функций обработки строк
Библиотека Обработки строк string.h C++
C++ Составить программу на языке С++ для обработки строк с использованием указателей
Нужна рекурсивная функция для переворачивания строк C++
Задание для обработки массива строк C++
Алгоритм обработки вектора строк C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3030 / 2351 / 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
3030 / 2351 / 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     Функция для обработки строк
Ответ Создать тему
Опции темы

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