Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разделение на слова, работа со строками 
V
    Опции темы
Metalex
Дата 18.1.2011, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Привет всем.
Нужно подсчитать кол-во слов в строке. Решил, что нужно начать с разделения строки на слова.
Вот код, помогите поисправлять, а то не разбивается моя строка  smile :
Код

#include <iostream>
#include <string>
using namespace std;

int main ()
{
    cout<<"Введите n - длину строки"<<endl;
    int n;
    cin>>n;
    char *stroka = new char [n];
    cout<<"Введите строку"<<endl;
    cin>>stroka;
    
    int i, slova;
    for (i=0; i<n; i++)
        if (stroka[i]==' ')
           slova++;
    char **sl = new char *[slova];
    for (i=0; i<slova; i++)
        sl[i]=new char [15];
    
    char *pch;
    i=0;
    pch=strtok (stroka, " ");
    while (pch != NULL)
    {
          sl[i]=pch;
          pch=strtok(NULL, " ");
          i++;
    }
    
    for (i=0; i<slova; i++)
        cout<<sl[i]<<endl;
    
    system ("Pause");
    return 0;
}

Спасибо.

Добавлено через 38 секунд
строки нужно через чар делать, стринг не катит


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
KaraKum
Дата 18.1.2011, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: нет
Всего: 1



Тут прежде уже спрашивали как сосчитать количество слов. Таков был ответ:
Код

std::vector<std::string> something;
int nonspaceSymbolsCount = 0;
int wordsCount = 0;
for(std::vector<std::string>::iterator it = something.begin(); it != something.end(); it++)
{
     //началось ли уже новое слово:
     bool isWord = false;
     //сколько вообще всяких символов в этой строке:
     const int symbolsCount = (*it).length;
     for(int i = 0; i < symbolsCount; i++)
     {
          //если НЕ пробел:
          if((*it)[i] != ' ')
          {
               nonspaceSymbolsCount++;
               //если прежде были только пробелы или это первый непробельный символ в этой строке:
               if(!isWord)
               {
                    isWord = true;
                    wordsCount++;
               }
               //в противном случае текущий символ лишь часть уже подсчитанного (учтённого) слова...
          }
          //предыдущее слово однозначно закончилось (неважно сколько пробелов после него):
          else
          {
               isWord = false;
          }
     }
}
printf("non-space symbols count: %d; words count: %d.\n", nonspaceSymbolsCount, wordsCount);


Добавлено через 1 минуту и 12 секунд
Заменить std::string на char* нужно только.
PM MAIL WWW   Вверх
Modul
Дата 18.1.2011, 15:49 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



Цитата(Metalex @  18.1.2011,  14:41 Найти цитируемый пост)
Нужно подсчитать кол-во слов в строке. Решил, что нужно начать с разделения строки на слова.


Цитата(Metalex @  18.1.2011,  14:41 Найти цитируемый пост)
строки нужно через чар делать, стринг не катит



Код

#include <iostream>


int main() 


    char str[] = "he ho ha"; 
     
    char *mas[3]; 
    mas[0] = new char[3]; mas[0][2]='\0';
    mas[1] = new char[3]; mas[1][2]='\0';
    mas[2] = new char[3]; mas[2][2]='\0';


    int N = 0;
    int j = 0;

    for (int i=0; i<=7; i++)
    {
        if (str[i] != ' ') 
            mas[N][j++] = str[i];
        else
        {
            N++;
            j = 0;
        }

    }

    // Выводим слова
    for (int i=0; i<3; i++)
        std::cout <<  mas[i] << std::endl;
    // Количество слов
    std::cout << N+1 << std::endl;


    return 0; 
}


Ну посмотри этот вариант, может пойдет.
--------------------
I'll be back !
PM MAIL   Вверх
Albor
Дата 18.1.2011, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 2
Всего: 9



Попробуй такую функцию:
Код

#include<string>
int count_word( char * pStr )
{
int cnt(0);
bool bInWord(false);
while (*pStr!='\0')
bInWord=isalpha(*pStr++)?true:bInWord?++cnt,false:bInWord;
return bInWord?cnt+1:cnt;
}

PM MAIL ICQ   Вверх
Metalex
Дата 19.1.2011, 03:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Всем спасибо, помог вариант Modul'a


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.