Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2010, 10:52   #1
Fatummors
Студент
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 11
По умолчанию Количество слов в рядке. Разбитие по по пять символов.

Здравствуйте! У меня такой вопрос.
Вобщем мне поставили задание написать программу, которая должна считать с клавиатуры строчку, посчитать количество слов, затем разбить его по пять символов, не учитывая пробелы.
Что у меня вышло:
Код:

#include <string.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
int n=255;
char *word=new char[n];
int main(){
word[0]=0;
cout << "Enter text:" ;
gets(word);
if (0==word[0]){ // Тут проверка.. левая немного

                cout << "Error! Array is null. Terminate... " << endl;
                system("pause");
                return 0;
                }
int count=0;
char lenght=strlen(word);
    for(int i=0;i<lenght-1;i++){
            if((word[i]==' ') && (word[i+1]!=' ')){
            count++; 
            }
            }           
if (word[0]!=' '){
            count++;
            }
cout << " Number of words: ";
cout << count;
system("PAUSE");
cout << endl;
for(int i=0;i<lenght-1;i++){
        if(word[i]==' '){
        word[i]=word[i+1];
        }
        if(word[i]!=' '){
        cout << word[i-1];
        }
        if(i%5==1){
        cout << endl;
        }
        }
system("PAUSE");
delete[] word;
}
Проблема следующая.
Считает количество введённых слов хорошо, примерно до 7 слов, если ввести больше, то выдаёт, что одно слово только. Как лучше сделать проверку введён ли текст вообще? И при обрезке словпо пять символов у меня дублирует первый символ каждого нового слова + первая буква первого слова вылазит на верх. Сложно обьяснил, но в дополнение прикрепил к посту скрин. Писалось в DevCpp
Изображения
Тип файла: jpg code.jpg (37.8 Кб, 45 просмотров)
Fatummors вне форума Ответить с цитированием
Старый 05.03.2010, 11:00   #2
Fatummors
Студент
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 11
По умолчанию

Вот еще пытался переписать более правильно с функциями и классами, но второе задание( разделить по пять символов) вообще не работает.
Код:

#include <string.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
char *word=new char[2550];
int counter=0;
int i;
class dict{
      public:
      int count();
      int num(); 
      };
char lenght=strlen(word);            
int dict::count(){
word[0]=0;
cout << "Enter text:" ;
gets(word);
if (0==word[0]){
                cout << "Error! Array is null. Terminate... " << endl;
                return 0;
                }
char lenght=strlen(word);
    for(i=0;i<lenght-1;i++){
            if((word[i]==' ') && (word[i+1]!=' ')){
            counter++; 
            }
            }
            }
int dict::num(){
    if (word[0]!=' '){
            counter++;
            }
cout << "Number of words: ";
cout << counter << endl;
system("PAUSE");
cout << endl;
for(i=0;i<lenght-1;i++){
        if(word[i]==' '){
        word[i]=word[i+1];
        }
        if(word[i]!=' '){
        cout << word[i-1];
        }
        
        if(i%5==1){
        cout << endl;
        }
        }
        }
      
int main(){
    dict doit;
doit.count();
doit.num();
system("pause");
delete[] word;
}
И скрин:
Изображения
Тип файла: jpg code2.jpg (30.7 Кб, 46 просмотров)
Fatummors вне форума Ответить с цитированием
Старый 05.03.2010, 11:25   #3
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Держи
Код:
#include <iostream>
#include <string>

using namespace std;

int countWords(string s)
{
	int res = 0;
	bool word = false;
	for(int i = 0; i < s.size(); i++)
	{
		if(s[i] == ' ' && word)
		{
			res++;
			word = false;
		}
		else if(s[i] != ' ')
			word = true;
	}
	if(word)
		res++;
	return res;
}

void cutOnWords(string s,int wordLen)
{
	string curWord;
	for(int i = 0; i < s.size(); i++)
		if(s[i] != ' ')
		{
			curWord.push_back(s[i]);
			if(curWord.size() == wordLen)
			{
				cout << curWord << endl;
				curWord.clear();
			}
		}
	if(curWord.size() > 0)
		cout << curWord << endl;
}

int main()
{
	string s;
	cout << "Enter text: ";
	getline(cin,s);
	if(s.size() == 0)
	{
		cout << "Error! Array is null. Terminate..." << endl;
		return 0;
	}
	cout << "Number of words: " << countWords(s) << endl;
	cutOnWords(s,5);
	system("PAUSE");
	return 0;
}
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer

Последний раз редактировалось Ozerich; 05.03.2010 в 11:33.
Ozerich вне форума Ответить с цитированием
Старый 05.03.2010, 12:45   #4
Fatummors
Студент
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 11
По умолчанию

Ozerich, спасибо!

Не спешите тему прикрывать, я еще поробую код разобрать, может вопросы будут.

Еще, кто мне может объяснить, в чём моя ошибка была? Буду признателен.

Последний раз редактировалось Fatummors; 05.03.2010 в 12:53.
Fatummors вне форума Ответить с цитированием
Старый 06.03.2010, 23:56   #5
Fatummors
Студент
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 11
По умолчанию

Так в чём моя ошибка была, что никто не знает?
Fatummors вне форума Ответить с цитированием
Старый 07.03.2010, 01:21   #6
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Ошибка была в самом алгоритме. Посмотри как я тебе делал и как ты.
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 07.03.2010, 13:04   #7
Fatummors
Студент
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 11
По умолчанию

Хорошо, а что такое s.size()? Как я понял функция определяет размер символов в нашей строке s. Это что стандартный метод в библиотеке string? И еще что это push_back(s[i]);

Последний раз редактировалось Fatummors; 07.03.2010 в 13:28.
Fatummors вне форума Ответить с цитированием
Старый 07.03.2010, 14:29   #8
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

string это STL строка.
С ней работать удобнее чем с обычными C-строками.
Вот тут можешь почитать что значит push_back,size и многое другое
http://www.cplusplus.com/reference/string/string/
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 07.03.2010, 16:39   #9
Fatummors
Студент
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 11
По умолчанию

Ozerich, благодарю. Буду смотреть что и как.
Fatummors вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текстовый файл. Подсчитать в нем количество слов, символов, абзацев. Xeon332 Помощь студентам 3 24.12.2009 01:23
Дана строка, состоящая из нескольких слов. Найти количество слов, которые содержат хотя бы одну букву "А" Mashaa Помощь студентам 13 09.12.2009 13:28
Составить в алфавитном порядке список всех слов, встречающихся в тексте, и количество этих слов. KAPAHDAW Паскаль, Turbo Pascal, PascalABC.NET 2 17.02.2009 01:19
количество цифр и количество символов до первой гласной буквы 111111 Общие вопросы C/C++ 2 22.12.2008 12:15
подсчитать количество символов слов и предложений nev Помощь студентам 4 09.06.2007 21:22