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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2017, 01:23   #1
ilya5312
Новичок
Джуниор
 
Регистрация: 06.10.2017
Сообщений: 1
По умолчанию Ошибка в программе

Здравствуйте, в моей программе невидимая для меня ошибка: после ввода данных в консоль, программа не выводит ничего ни при каких обстоятельствах, из-за этого я никак не могу выполнить задание, и мне нужна помощь...

Задание:
С клавиатуры вводится последовательность, содержащая от 1 до 50 слов, в каждом из которых от 1 до 10 строчных латинских букв и цифр. Между соседними словами произвольное число пробелов. За последним словом точка. Выполнить обработку этой последовательности в соответствии правилом, заданным в следующей таблице.
При выполнении этих заданий обратить внимание на то, что из-за произвольного числа пробелов между словами нельзя определить максимально возможную длину последовательности.
Вывести на экран только те слова последовательности, в которых первая буква слова встречается в этом слове еще раз

Спасибо заранее за указание на ошибку или хотя бы намек на неё.

Код:
#include <iostream>

using namespace std;

int main()
{
	char a [1000];
	char b [51];
	int c=0;
	bool d=0;
	cin.getline(a,1000);

	for(int i=0;a[i]!='.';i++)
	{
		if((a[i]!='.')or(a[i]!=' '))
		{
			b[c]=a[i];
			if ((c!=0)and(b[0]==b[c]))
                d=1;
				
			c=c+1;
		}	
		else if(d==1)
		{
			d=0;
			c=0;
			for(int j=0;j!='\0';j++)
			{
				cout << b[j];
				b[j]='\0';
			}
			cout << endl;
		}
		else
		{
		    c=0;
		}
	}

	if (d==1)
		for(int j=0;j!='\0';j++)
		{
			cout << b[j];
		}

	system("pause");
	return 0;
}

Последний раз редактировалось ilya5312; 06.10.2017 в 01:31. Причина: Забыл добавить код...
ilya5312 вне форума Ответить с цитированием
Старый 06.10.2017, 02:41   #2
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

У вас там походу С++, так что....пусть будет натуральный С++, а не помесь слона с носорогом и с паскалем (or/and в С++ записываются не так). Старался выдержать старый стандарт, в С++11 можно еще короче все записать:

Код:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

bool BothAreSpaces(char lhs, char rhs) { return (lhs == rhs) && (lhs == ' '); }

std::vector<std::string> split(const std::string &str, const std::string &delim)
{   
    const size_t delim_pos = str.find(delim);

    if (delim_pos == std::string::npos)
        return {str};
    std::vector<std::string> ret{str.substr(0, delim_pos)};
    std::vector<std::string> tail = split(str.substr(delim_pos + delim.size(), std::string::npos), delim);
    ret.insert(ret.end(), tail.begin(), tail.end());
    return ret;
}

int main()
{
    //step 1 - enter string, remove '.' from it
    std::string src;
    std::getline(std::cin, src, '.'); //"."  will be absent in result, size don't care - stdlib will handle
    
    //step 2 - remove all multispaces.
    std::string::iterator new_end = std::unique(src.begin(), src.end(), BothAreSpaces); //moves all "double space" to the end of string
    src.erase(new_end, src.end()); //now removing all double spaces, which are at the end
    
    //now we have words separated by 1 space only    
    std::vector<std::string> words(split(src, " ")); //step 3 - split string into words list
    
    //now we have "array" (vector) of words
    for (size_t i = 0, sz = words.size(); i < sz; ++i) //step 4 - for each word in list do the task
    {
        const std::string& str = words.at(i); //shortcut
        if (str.size() > 1)  //we do task IF word is at least 2 symbols
        {
            if (str.find(str.c_str()[0], 1) != std::string::npos) //step 5 - checking if we have 2 same chars in 1 word
            {
                std::cout << "Word:  "<<str <<std::endl;
            }
        }
    }
}

Цитата:
$ ./a.out
some wow wordsw.
Word: wow
Word: wordsw

Последний раз редактировалось alexzk; 06.10.2017 в 02:57.
alexzk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C ошибка в программе Виктория2604 Помощь студентам 1 27.09.2015 15:36
Ошибка в программе C++ Ilai Помощь студентам 1 13.01.2015 08:37
Ошибка программе ch_dark БД в Delphi 4 05.12.2013 21:01
Ошибка в программе Silva_de_souza Паскаль, Turbo Pascal, PascalABC.NET 8 03.05.2012 17:14
Ошибка в программе! Rakim Паскаль, Turbo Pascal, PascalABC.NET 3 03.05.2012 14:31