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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2010, 01:57   #1
Dawka
 
Регистрация: 17.12.2010
Сообщений: 3
По умолчанию работа с текстом (с++)

помогите разобраться в чем ошибка.
задание:дан текстюисключить из него символы,расположенные между всеми парами скобок ( ). сами скобки тоже должны быть исключены.внутри каждой пары скобок могут быть друние скобки.
код:
#include <iostream>
#include <cstdio>
#include <stdio.h>
#include <conio.h>
using namespace std;

int main()
{
char ss,text [80];
int c,j;
cout << "Vvedite tekst i nazhmite enter:\n";
gets(text);

c=0;
ss=' ';
for (j=1 ; sizeof(text) ; )
{

if (text[j]='(') c++;
if (c=0 ) ss=ss+text[j];
if (text[j]=')') c--;
}
cout << "rezultat:\n";
cout << text[j];

getch();
return 0;
}
Dawka вне форума Ответить с цитированием
Старый 17.12.2010, 02:11   #2
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

нужно вести ещё учёт баланса скобок...
вот такое выражение не прокатит (352345(35)3545)
прога оставит вот это 3545)
Arkuz вне форума Ответить с цитированием
Старый 17.12.2010, 02:15   #3
Dawka
 
Регистрация: 17.12.2010
Сообщений: 3
По умолчанию

и как эхто сделать?
и еще программа почему то не выдает результат, просто зависает после ввода текста.
Dawka вне форума Ответить с цитированием
Старый 17.12.2010, 02:21   #4
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Попробуй так!!
Код:
#include <iostream>
#include <cstdio>
#include <stdio.h>
#include <conio.h>
#include <string.h>
using namespace std;

int main()
{
char ss[80], text[80];
int c, j, i, pos;
cout << "Vvedite tekst i nazhmite enter:\n";
gets(text); 
j = 0;
i = 0;
while (text[j] != '(' )
{
    ss[i] =text[j];
    j++;
    i++;
}
while (text[j] != ')')
{    j++;
}
j++;
for (pos = j; pos < strlen(text); pos++)
{
    ss[i] = text[j];
    i++;
    j++;
}
cout << "rezultat:\n";
for (c = 0; c < i; c++)
cout << ss[c];

getch();
return 0;
}
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 17.12.2010, 02:25   #5
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Ну так ты сделал бесконечный цикл , что ты тогда хочешь от программы , она и гоняет его по кругу .

Код:
for (j=1 ; sizeof(text) ; )
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 17.12.2010, 02:50   #6
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

поищите вот тут ошибки, я комментарии для лучшего понимаю нарисовал )

Код:
//задание:дан текстюисключить из него символы,расположенные между всеми парами скобок ( ). сами скобки тоже должны быть исключены.внутри каждой пары скобок могут быть друние скобки.
//код:
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <string.h>
using namespace std;

void deletetext(char * text,int i,int j){  //указатель на массив символов
	int strle=strlen(text);//strlen(text)может замедлить работу
	while(j>(i+1)){
		for (int k=j-1;k<strle;k++)//
			text[k]=text[k+1];//k-тый символ равен следующему
		//cout<<text<<endl;//выводим, нужно убрать
		j--;//так как переместили налево
		strle--;//так как перемещаем \0
	}
}

int main()
{
char text [80];
cout << "Vvedite tekst i nazhmite enter:\n";
cin.getline(text,sizeof(text),'\n');
int skob=0;//количество скобок, если оно равно 1 - значит эти скобки парные с обоих концов
int strle=strlen(text); //длина строки, чтобы не замедлять работу
for(int i=0;i<strle;i++){
	skob=0;//каждую итерацию, пока не будут найдена открывающая скобка
	if (text[i]=='(')//если находим
	{
		skob++;//первая пара скобки
		for (int j=i+1;j<strle;j++){
			if (text[j]=='(')//если вторая пара - увеличиваем количество скобок
				skob++;
			if ((text[j]==')')&&(skob==1))//если это (_____), то удаляем _____ оттуда
			{
				deletetext(text,i,j);
				strle=strlen(text);//пересчитываем длину текста
				break;//прерываем цикл для j
			}
			if ((text[j]==')')&&(skob>1))//если символ ), и скобки больше 1 (не крайняя)
				skob--;//уменьшаем на 1
		}
	}
}

cout<<text<<endl;
system("pause");
return 0;
}
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 22.12.2010, 00:44   #7
Dawka
 
Регистрация: 17.12.2010
Сообщений: 3
По умолчанию

а можно еще спросить,что делает этот кусок:

void deletetext(char * text,int i,int j){ //указатель на массив символов
int strle=strlen(text);//strlen(text)может замедлить работу
while(j>(i+1)){
for (int k=j-1;k<strle;k++)//
text[k]=text[k+1];//k-тый символ равен следующему
//cout<<text<<endl;//выводим, нужно убрать
j--;//так как переместили налево
strle--;//так как перемещаем \0
}
}
Dawka вне форума Ответить с цитированием
Старый 22.12.2010, 01:40   #8
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

Код:
void deletetext(char * text,int i,int j){  //указатель на массив символов
	int strle=strlen(text);//strlen(text)может замедлить работу
	while(j>(i+1)){
		for (int k=j-1;k<strle;k++)//
			text[k]=text[k+1];//k-тый символ равен следующему
		//cout<<text<<endl;//выводим, нужно убрать
		j--;//так как переместили налево
		strle--;//так как перемещаем \0
	}
}
этот кусок удаляет символы между i-тым и j-тым символом, не затрагивая i-тый и j-тый, удаляя по одному символу за проход, за один проход же уменьшая длину строки на 1, и уменьшая количество символов в строке на 1 (j)
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстом cinik Помощь студентам 1 22.01.2010 21:48
Работа с текстом С++ Verwolf Помощь студентам 4 02.11.2009 17:18
Работа с текстом. J0n1cK Паскаль, Turbo Pascal, PascalABC.NET 4 09.05.2009 00:29
Работа с текстом wwww Общие вопросы Delphi 5 18.12.2007 17:23