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

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

Восстановить пароль Регистрация
 
aquarius-a
0 / 0 / 0
Регистрация: 16.04.2011
Сообщений: 48
28.06.2011, 00:04     Обработка строки #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
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++
Обработка строки C++
Строки обработка C++
C++ Обработка строки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
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
 Аватар для OstapBender
581 / 519 / 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
 Аватар для xAtom
910 / 735 / 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 включительно?
Yandex
Объявления
28.06.2011, 20:08     Обработка строки
Ответ Создать тему
Опции темы

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