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

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

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

Обработка строки - C++

28.06.2011, 00:04. Просмотров 442. Ответов 5
Метки нет (Все метки)

здравствуйте.
такая задача: написать функцию, входным параметром которой является указатель на строку. функция должна вернуть количество слов в строке, у которых первый и последний символ совпадают.
я тут кое-чего набыдлокодил, да и то не работает. если можно поправьте существующее решение, чтобы оно работало или предложите более лучшее решение:
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
33
int quantity(char*);
int main()
{
char s1[]="  abcd abca  a abcdefa aa aba";
cout<<quantity(s1);
 
getch();
return 0;
}
int quantity(char*s1Ptr)
{
size_t i,j=0;
int count=0;
int index[100];
for (i=0;s1Ptr!='\0';i++)
   {
   if (s1Ptr[i]==' '||s1Ptr[i]=='\0')
     {
     index[j]=i;
     j++;
     }
   for (j=0;j<=(sizeof(index)/sizeof(int));j++)
     {
     if ((index[j+1]-index[j])<=2) continue;
       else
          {
          if (s1Ptr[*(index)+1]==s1Ptr[*(index+1)-1]) count++;
          }
     }
 
   }
return count;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2011, 00:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обработка строки (C++):

Обработка строки - C++
Здравствуйте. У меня есть строка: нолщаувсдлч ощзхзждцвыбьчля start Как удалить все до слова start?

обработка строки - C++
Обработка строки при помощи указателей Задание : для ввода всех строк использовать один и тот же символьный массив tmp . ...

Обработка строки - C++
Доброе время суток. Имеется такая задача : Дана строка, содержащая слова, разделенные одним или несколькими разделительными символами...

Обработка строки - C++
Помогите решить задачи 1. Дана строка текста, в которой слова разделены пробелами и двоеточиями. Необходимо: - определить количество...

обработка строки в с++ - C++
дана строка(вводимая пользователем с клавиатуры). найти и вывести те слова из строки которые начинаются и заканчиваются на одну и ту же...

Строки обработка - C++
Задание. ВВести строку, отставить в строке только симметричные фрагменты длинной мин 5 символов. Например asdsa. Остальные заменить на...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
28.06.2011, 00:07 #2
Цитата Сообщение от aquarius-a Посмотреть сообщение
написать функцию, входным параметром которой является указатель на строку. функция должна вернуть количество слов в строке, у которых первый и последний символ совпадают.
C
1
2
3
4
5
6
7
8
#define DELIM " ,.?!:;"
 
size_t func(char *s){
  size_t res = 0;
  for(char *p = strtok(s, DELIM); p; p = strtok(NULL, DELIM))
    if(p[0] == p[strlen(p) - 1]) ++res;
  return res;
}
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
28.06.2011, 00:13 #3
aquarius-a, ух решение))
двигай в сторону strtoka и проверяй 1 и последний символы.
http://www.cplusplus.com/reference/c...string/strtok/
aquarius-a
0 / 0 / 0
Регистрация: 16.04.2011
Сообщений: 48
28.06.2011, 00:24  [ТС] #4
да я и сам понимаю, что накрутил непонятно что, но хотелось не использовать библиотечные функции, а придумать свой алгоритм.
asics, вы написали короткое, но непонятное пока что для меня решение. в любом случае вам спасибо, может немного позже у меня получится разобраться.
xAtom
914 / 739 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
28.06.2011, 01:51 #5
Ладно я уже с..
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
33
34
35
36
37
38
#include <ctype.h>
#include <iostream>
using namespace std;
 
/*
 подсчёт слов начинающие и кончающие слово на одну букву
 _len - по-умолчанию слово сравнвается минимум из 2-сиимволов
 _reg = true(без учёта регистра), false(с регистром)
*/
int  count_word(const char*  str, bool _reg, int _len = 2) {
    int  len = 0, cnt = 0;
           char  ch;
    do {
        if(isalnum( *str ))  cnt++;
        else {
           if(cnt >= _len) {
        str  -= cnt;
        ch    = *str;
        str += cnt - 1;
        if( ch == *str && ! _reg || tolower(ch) == tolower(*str) && _reg) {
            ++len;
            *str++;
        }
          }
          cnt = 0;
     }
          } while( *str++ != '\0' );
      return  len;
}
 
 
void main(void) {
 
    int cnt = count_word("abcd abca  a abcdefa aa aba Ada", true);
    cout << "cnt word: " << cnt << endl;
       
    cin.get();
}
aquarius-a
0 / 0 / 0
Регистрация: 16.04.2011
Сообщений: 48
28.06.2011, 20:08  [ТС] #6
ув. xAtom, вы бы не могли пояснить строки с 17 по 21 включительно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2011, 20:08
Привет! Вот еще темы с ответами:

Обработка строки Char - C++
Задание: Пользователь вводит текст(рандомные символы). Найти наибольшую группу символов состоящих не из букв и вывести начальную...

Обработка строки из файла - C++
Получаю строку из файла. CLogFile* logFileObj=NULL; logFileObj=new CLogFile(FileName); CString line; BOOL...

Обработка введенной строки - C++
Задание: ввести строку арифметического вида со скобками и проверить правильность скобок. Неправильно проверяет скобки () - правильно, это...

Обработка символьной строки - C++
(В Си консольная версия) Функция должна находить первое вхождение в строку заданной подстроки.При реализации функции запрещается...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.06.2011, 20:08
Ответ Создать тему
Опции темы

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