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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2014, 12:41   #1
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию Работа со строками [Visual C++]

Доброго времени суток.Столкнулся с проблемой при решении поставленной задачи.
Дан текст. Подсчитать количество слов в данной строке.Подсчитать количество букв а в последнем слове данной строки.Найти количество слов, начинающихся с буквы б. Найти количество слов, у которых первый и последний символы совпадают между собой.

Код:
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
using namespace std;
int main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	char s[100], m, n;
	int len, i, k = 0, q = 0, l;
	cout << "Введите строку: ";
	gets(s);
	cout << "Строка символов: " << s << endl;
	len = strlen(s);
	l = len - 1;
	cout << len;
	for (i = 0; i < len; i++)
	{
		if ((isalnum(s[i])) && ((isspace(s[i + 1]) || s[i + 1] == '\0')))
			k++;
	}
	cout << "Количество слов:" << k;
	k = 0;
	for (i = 0; i < len; i++)
	{
		if (((isspace(s[i])) && (s[i + 1] = 'б')))
			k++;
	}
	cout << "Слова начинающиеся с буквы 'б':" << k;
	k = 0;
	while (s[l] != ' ')
	{
		if (s[l] == 'a')
		{
			k++;
		}
		l--;
	}
	cout << "Количество букв 'а':" << k;
	k = 0;
	for (i = 0; i < len; i++)
	{
		if ((isspace(s[i])) && (isalnum(s[i + 1])))
		{
			m = s[i + 1];
		}
		if ((isalnum(s[i])) && (isspace(s[i + 1])))
		{
			n = s[i];
		}
		if (m == n)
		{
			k++;
		}
	}
	cout << "Слова начинающиеся и заканчивающиеся одной и той же буквой:" << k;
	system("pause");
	return 0;
}
Ошибка:
1.png
spectrum988 вне форума Ответить с цитированием
Старый 01.11.2014, 13:17   #2
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

А можно использовать не char, а string и STL?

С макросами я не знаком, поэтому я использовал для решения STL
Код:
//Дан текст. Подсчитать количество слов в данной строке.
//Подсчитать количество букв а в последнем слове данной строки.
//Найти количество слов, начинающихся с буквы б.
//Найти количество слов, у которых первый и последний символы совпадают между собой.
#include <iostream>
#include <string>
#include <vector>     //std::vector
#include <algorithm>  //std::count_if
using namespace  std;

void text_to_words (string&, vector <string>&);     // функция для разбиения введенной строки на слова  
                                                                             // которые затем помещаются в вектор
void numb_letters_a (vector<string>&);

bool count_b (string s){      // это предикат (функция используется в алгоритме count_if)   
    return (s[0] == 'b');
}

bool count_same_fl (string s){            // предикат
    string::iterator itbeg = s.begin();
    string::iterator itend = s.end();
    --itend;
    return ( *itbeg == *itend );
}

int main()
{
    string str;
    cout << "Enter the sentence: ";
    getline(cin, str);
    
    vector <string> v;
    text_to_words(str, v);
    cout << "\nNumber of words: " << v.size();
    
    cout << "\nNumber of letters 'a' in the last word in a given string: ";
    numb_letters_a(v);
    
    cout << "\nNumber of words that start with 'b': ";
    int numb = count_if(v.begin(), v.end(), count_b);     // используем алгоритм count_if
    cout << numb << '\n';
    
    cout << "Number of words in which the first and last characters coincide: ";
    int num = count_if(v.begin(), v.end(), count_same_fl);
    cout << num << '\n';
    
    system ("pause");
    return 0;
}
//--------------------------------------------------------------------------
void text_to_words(string& s, vector <string>& v)
{
    string word;
    for ( int i=0; i <= s.size(); i++ )
        if ( s[i] == ' ' || i == s.size() )
        {
            for ( int j=0; j<i; j++ )
                word += s[j];
            v.push_back(word);
            word.clear();
            s.erase(0,i+1);
            i = 0;
        }
}
//-----------------------------------------------------------------------------
void numb_letters_a (vector<string>& v)
{
    int indLast = v.size();
    string s = v[indLast-1];
    int count = 0;
    for (string::iterator it = s.begin(); it != s.end(); it++)
        if (*it == 'a')
            ++count;
    cout << count;
}
Если не понимаете или есть вопросы - спрашивайте
Вот за эти строки мне можно надавать люлей
Код:
for ( int i=0; i <= s.size(); i++ )
        if ( s[i] == ' ' || i == s.size() )
        {
            for ( int j=0; j<i; j++ )
Спешил поскорей настрочить!
На выходе соответственно Ваш код и мой:
Изображения
Тип файла: jpg Безымянный.jpg (25.3 Кб, 123 просмотров)
Тип файла: jpg Безымянный.jpg (27.1 Кб, 117 просмотров)

Последний раз редактировалось igoreshka3333; 01.11.2014 в 19:55.
igoreshka3333 вне форума Ответить с цитированием
Старый 02.11.2014, 15:36   #3
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Спасибо,тоесть я так понимаю что моя программа исполняется в среде Builder,а с чем бы могла быть связана ошибка возникшая при выполнении в Visual
spectrum988 вне форума Ответить с цитированием
Старый 02.11.2014, 16:03   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
я так понимаю что моя программа исполняется в среде Builder
Я твою прогу запустил в Code::Blocks GCC
Цитата:
Введите строку: привет мир
Строка символов: привет мир
10Количество слов:0Слова начинающиеся с буквы 'б':1Количество букв 'а':0Слова на
чинающиеся и заканчивающиеся одной и той же буквой:10Для продолжения нажмите люб
ую клавишу . . .
Никаких ошибок исключая неверный результат не вижу.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2014, 16:14   #5
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Cпасибо,понял.
spectrum988 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа со строками в Visual C++ Romowski Помощь студентам 7 25.12.2012 09:36
C++(Visual). Работа со строками. RayBM Помощь студентам 0 18.09.2012 21:48
Работа со строками(visual c++) Vitalka Помощь студентам 3 17.12.2010 13:08
работа со строками в visual c++ 6.0 MURREX Помощь студентам 1 09.12.2008 10:57
Задача в Visual C++ 6.0, работа со строками Serezhik Visual C++ 6 30.11.2008 20:31