int main(){ char a[1000],c[1000],b[1000]; scanf("%s",a); printf("\nGiven String : {%s}\n",a); replaceRange(a,c); replaceSq(c); replaceBraces(c); addPlus(c,b); printf("\nModified String : {%s}\n",b); return 0; }
// Do one completion, searching in the desired direction, // if possible void KateWordCompletionView::complete( bool fw ) { KTextEditor::Range r = range(); int inc = fw ? 1 : -1; KTextEditor::Document *doc = m_view->document(); if ( d->dcRange.isValid() ) { //kDebug( 13040 )<<"CONTINUE "<<d->dcRange; // this is a repeted activation // if we are back to where we started, reset. if ( ( fw && d->directionalPos == -1 ) || ( !fw && d->directionalPos == 1 ) ) { const int spansColumns = d->liRange->end().column() - d->liRange->start().column(); if ( spansColumns > 0 ) doc->removeText( *d->liRange ); d->liRange->setRange( KTextEditor::Range::invalid() ); d->dcCursor = r.end(); d->directionalPos = 0; return; } if ( fw ) { const int spansColumns = d->liRange->end().column() - d->liRange->start().column(); d->dcCursor.setColumn( d->dcCursor.column() + spansColumns ); } d->directionalPos += inc; } else // new completion, reset all { //kDebug( 13040 )<<"RESET FOR NEW"; d->dcRange = r; d->liRange->setRange( KTextEditor::Range::invalid() ); d->dcCursor = r.start(); d->directionalPos = inc; d->liRange->setView( m_view ); connect( m_view, SIGNAL(cursorPositionChanged(KTextEditor::View*,KTextEditor::Cursor)), this, SLOT(slotCursorMoved()) ); } d->re.setPattern( "\\b" + doc->text( d->dcRange ) + "(\\w+)" ); int pos ( 0 ); QString ln = doc->line( d->dcCursor.line() ); while ( true ) { //kDebug( 13040 )<<"SEARCHING FOR "<<d->re.pattern()<<" "<<ln<<" at "<<d->dcCursor; pos = fw ? d->re.indexIn( ln, d->dcCursor.column() ) : d->re.lastIndexIn( ln, d->dcCursor.column() ); if ( pos > -1 ) // we matched a word { //kDebug( 13040 )<<"USABLE MATCH"; QString m = d->re.cap( 1 ); if ( m != doc->text( *d->liRange ) && (d->dcCursor.line() != d->dcRange.start().line() || pos != d->dcRange.start().column() ) ) { // we got good a match! replace text and return. d->isCompleting = true; KTextEditor::Range replaceRange(d->liRange->toRange()); if (!replaceRange.isValid()) { replaceRange.setRange(r.end(), r.end()); } doc->replaceText( replaceRange, m ); d->liRange->setRange( KTextEditor::Range( d->dcRange.end(), m.length() ) ); d->dcCursor.setColumn( pos ); // for next try d->isCompleting = false; return; } // equal to last one, continue else { //kDebug( 13040 )<<"SKIPPING, EQUAL MATCH"; d->dcCursor.setColumn( pos ); // for next try if ( fw ) d->dcCursor.setColumn( pos + m.length() ); else { if ( pos == 0 ) { if ( d->dcCursor.line() > 0 ) { int l = d->dcCursor.line() + inc; ln = doc->line( l ); d->dcCursor.setPosition( l, ln.length() ); } else { KNotification::beep(); return; } } else d->dcCursor.setColumn( d->dcCursor.column()-1 ); } } } else // no match { //kDebug( 13040 )<<"NO MATCH"; if ( (! fw && d->dcCursor.line() == 0 ) || ( fw && d->dcCursor.line() >= doc->lines() ) ) { KNotification::beep(); return; } int l = d->dcCursor.line() + inc; ln = doc->line( l ); d->dcCursor.setPosition( l, fw ? 0 : ln.length() ); } } // while true }
void Blob::replaceRange(Range range, const Blob *other) { replaceRange(range, other->bytes(), other->length()); }
void infixToPostFix(const char *input,char *postfix){ // the strings are already assumed to be present // currently symbols ---> '-' range operator // '|' for union // '*' as usual // []() are essentially the same // permissible symbols are Alphabets,numerical,dot and everything else char a[1000],b[1000],c[1000]; copyString(input,a); printf("\nGiven Input :\n{%s}\n",a); replaceBraces(a); printf("\nAfter changing braces :\n{%s}\n",a); replaceRange(a,c); printf("\nAfter replacing the range operator :\n{%s}\n",c); addPlus(c,b); printf("\nAfter adding the extra +(s) :\n{%s}\n",b); /***********We will process on the string b********************/ stack S; queue Q; init_queue(&Q); init_stack(&S); int i=0; char stacktop; while(1){ if(b[i]=='\0'){ // break the while loop and transfer everything stack to queue break; } switch(b[i]){ case '+':{ while(1){ if(isStackEmpty(&S)==1){ break; } stacktop=stack_top(&S); if(stacktop=='+'||stacktop=='|'||stacktop=='*'){ stack_pop(&S); enqueue(&Q,stacktop); }else{ break; } } stack_push(&S,b[i]); break; } case '|':{ while(1){ if(isStackEmpty(&S)==1){ break; } stacktop=stack_top(&S); if(stacktop=='|'||stacktop=='*'){ stack_pop(&S); enqueue(&Q,stacktop); }else{ break; } } stack_push(&S,b[i]); break; } case '*':{ while(1){ if(isStackEmpty(&S)==1){ break; } stacktop=stack_top(&S); if(stacktop=='*'){ stack_pop(&S); enqueue(&Q,stacktop); }else{ break; } } stack_push(&S,b[i]); break; } case '(':{ stack_push(&S,b[i]); break; } case ')':{ while(1){ if(isStackEmpty(&S)==1){ printf("\nParenthesis Missmatch !!\n"); return; } stacktop=stack_top(&S); if(stacktop=='('){ stack_pop(&S); break; }else{ stack_pop(&S); enqueue(&Q,stacktop); // break; } } break; } default:{ // otherwise the character is taken as a valid symbol enqueue(&Q,b[i]); } } i++; } while(1){ if(isStackEmpty(&S)==1){ break; } stacktop=stack_top(&S); if(stacktop=='('||stacktop==')'){ printf("\nParenthesis Missmatch!!!\n"); return; } enqueue(&Q,stacktop); stack_pop(&S); } printf("\nPostfix created successfully\n"); queueToString(&Q,postfix); printf("\nPostfix\n :{%s}\n",postfix); return; }