Click here to monitor SSC
SQLServerCentral is supported by Red Gate Software Ltd.
 
Log in  ::  Register  ::  Not logged in
 
 
 
        
Home       Members    Calendar    Who's On


Add to briefcase 123»»»

palindrome Expand / Collapse
Author
Message
Posted Friday, October 18, 2013 5:58 PM
SSC-Enthusiastic

SSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-Enthusiastic

Group: General Forum Members
Last Login: Wednesday, March 26, 2014 5:09 PM
Points: 178, Visits: 579
declare @count int
declare @charvaluefront varchar
declare @charvalueback varchar
declare @frontpos int
declare @backpos int
select @count=len('ABC')
set @frontpos=1
set @backpos=@count
while(@frontpos<=@count)
begin
select @charvaluefront=substring('ABC',@frontpos,1)
select @charvalueback=substring('ABC',@backpos,1)
set @frontpos=@frontpos+1
set @backpos=@backpos-1
print @charvaluefront
print @charvalueback
end

How do I compare @charvaluefront and @charvalueback values to test if the values are equal and print that its a palindrome.
I tried the if clause but it does not work.Any suggestions please
Post #1506345
Posted Friday, October 18, 2013 7:54 PM


SSCertifiable

SSCertifiableSSCertifiableSSCertifiableSSCertifiableSSCertifiableSSCertifiableSSCertifiableSSCertifiableSSCertifiable

Group: General Forum Members
Last Login: Today @ 9:08 AM
Points: 5,589, Visits: 24,968
   declare @count int
declare @charvaluefront varchar
declare @charvalueback varchar
declare @frontpos int
declare @backpos int
select @count=len('ABC')
set @frontpos=1
set @backpos=@count
while(@frontpos<=@count)
begin
select @charvaluefront=substring('ABC',@frontpos,1)
select @charvalueback=substring('abc',@backpos,1)
print substring('abc',@backpos,1) + '**' + substring('ABC',@frontpos,1)
set @frontpos=@frontpos+1
set @backpos=@backpos-1

IF LTRIM(RTRIM(@charvaluefront)) = LTRIM(RTRIM(@charvalueback))
PRINT 'Got them its a palindrome. ' + LTRIM(RTRIM(@charvaluefront))+ ' ' + LTRIM(RTRIM(@charvalueback))
end
Results:
c**A
b**B
Got them its a palindrome. B b
a**C

I would suggest that you post your actual code. The IF statement works as per sample above ....


If everything seems to be going well, you have obviously overlooked something.

Ron

Please help us, help you -before posting a question please read

Before posting a performance problem please read
Post #1506355
Posted Friday, October 18, 2013 8:24 PM
SSC-Enthusiastic

SSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-Enthusiastic

Group: General Forum Members
Last Login: Wednesday, March 26, 2014 5:09 PM
Points: 178, Visits: 579
This is my IF clause which did not work...
if (@charvaluefront= @charvalueback)
Print 'its a palindrome'

I am not sure why it did not work...
Post #1506358
Posted Saturday, October 19, 2013 3:42 AM


SSC-Insane

SSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-Insane

Group: General Forum Members
Last Login: Today @ 9:36 AM
Points: 23,279, Visits: 32,001
What are you trying to accomplish?



declare @Str1 varchar(10) = 'ABBA';

if @Str1 = reverse( @Str1)
print @Str1 + ' is a Palindrome'
else
print @Str1 + ' is not a Palindrome'

set @Str1 = 'ABC';

if @Str1 = reverse( @Str1)
print @Str1 + ' is a Palindrome'
else
print @Str1 + ' is not a Palindrome'





Lynn Pettis

For better assistance in answering your questions, click here
For tips to get better help with Performance Problems, click here
For Running Totals and its variations, click here or when working with partitioned tables
For more about Tally Tables, click here
For more about Cross Tabs and Pivots, click here and here
Managing Transaction Logs

SQL Musings from the Desert Fountain Valley SQL (My Mirror Blog)
Post #1506378
Posted Sunday, October 20, 2013 2:03 AM
SSC-Enthusiastic

SSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-Enthusiastic

Group: General Forum Members
Last Login: Wednesday, March 26, 2014 5:09 PM
Points: 178, Visits: 579
I do not want to use reverse function.please check the code I posted and correct what wrong I did.thanks
Post #1506449
Posted Sunday, October 20, 2013 2:39 AM


SSC-Insane

SSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-Insane

Group: General Forum Members
Last Login: Today @ 9:36 AM
Points: 23,279, Visits: 32,001
sqlserver12345 (10/20/2013)
I do not want to use reverse function.please check the code I posted and correct what wrong I did.thanks


And what is wrong with using the reverse function?



Lynn Pettis

For better assistance in answering your questions, click here
For tips to get better help with Performance Problems, click here
For Running Totals and its variations, click here or when working with partitioned tables
For more about Tally Tables, click here
For more about Cross Tabs and Pivots, click here and here
Managing Transaction Logs

SQL Musings from the Desert Fountain Valley SQL (My Mirror Blog)
Post #1506451
Posted Sunday, October 20, 2013 3:00 AM


SSC-Insane

SSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-Insane

Group: General Forum Members
Last Login: Today @ 9:36 AM
Points: 23,279, Visits: 32,001
And if you must use a loop then how about this?


declare @Str1 varchar(10) = 'ABBA';
declare @IsPalindrome bit = 1;
declare @LoopCnt int = 0;

while @LoopCnt < len(@Str1) and @IsPalindrome = 1
begin
select @IsPalindrome = case when substring(@Str1,1 + @LoopCnt,1) = substring(@Str1,len(@Str1) - @LoopCnt,1) then 1 else 0 end;
set @LoopCnt = @LoopCnt + 1;
end

if @IsPalindrome = 1
print @Str1 + ' is a palindrome'
else
print @Str1 + ' is not a palindrome'

set @LoopCnt = 0;
set @IsPalindrome = 1;
set @Str1 = 'ABC';

while @LoopCnt < len(@Str1) and @IsPalindrome = 1
begin
select @IsPalindrome = case when substring(@Str1,1 + @LoopCnt,1) = substring(@Str1,len(@Str1) - @LoopCnt,1) then 1 else 0 end;
set @LoopCnt = @LoopCnt + 1;
end

if @IsPalindrome = 1
print @Str1 + ' is a palindrome'
else
print @Str1 + ' is not a palindrome'
set @LoopCnt = 0;
set @IsPalindrome = 1;
set @Str1 = 'ABA';

while @LoopCnt < len(@Str1) and @IsPalindrome = 1
begin
select @IsPalindrome = case when substring(@Str1,1 + @LoopCnt,1) = substring(@Str1,len(@Str1) - @LoopCnt,1) then 1 else 0 end;
set @LoopCnt = @LoopCnt + 1;
end

if @IsPalindrome = 1
print @Str1 + ' is a palindrome'
else
print @Str1 + ' is not a palindrome'



You will also notice that I short circuit my loop to avoid unnecessary comparisons.



Lynn Pettis

For better assistance in answering your questions, click here
For tips to get better help with Performance Problems, click here
For Running Totals and its variations, click here or when working with partitioned tables
For more about Tally Tables, click here
For more about Cross Tabs and Pivots, click here and here
Managing Transaction Logs

SQL Musings from the Desert Fountain Valley SQL (My Mirror Blog)
Post #1506452
Posted Sunday, October 20, 2013 3:20 AM


SSC-Insane

SSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-InsaneSSC-Insane

Group: General Forum Members
Last Login: Today @ 9:36 AM
Points: 23,279, Visits: 32,001
Short circuited the loop even more:


declare @Str1 varchar(10) = 'ABBA';
declare @IsPalindrome bit = 1;
declare @LoopCnt int = 0;

while @LoopCnt < len(@Str1) and @IsPalindrome = 1 and (1 + @LoopCnt < len(@Str1) - @LoopCnt)
begin
select @IsPalindrome = case when substring(@Str1,1 + @LoopCnt,1) = substring(@Str1,len(@Str1) - @LoopCnt,1) then 1 else 0 end;
set @LoopCnt = @LoopCnt + 1;
end

if @IsPalindrome = 1
print @Str1 + ' is a palindrome'
else
print @Str1 + ' is not a palindrome';

set @LoopCnt = 0;
set @IsPalindrome = 1;
set @Str1 = 'ABC';

while @LoopCnt < len(@Str1) and @IsPalindrome = 1 and (1 + @LoopCnt < len(@Str1) - @LoopCnt)
begin
select @IsPalindrome = case when substring(@Str1,1 + @LoopCnt,1) = substring(@Str1,len(@Str1) - @LoopCnt,1) then 1 else 0 end;
set @LoopCnt = @LoopCnt + 1;
end

if @IsPalindrome = 1
print @Str1 + ' is a palindrome'
else
print @Str1 + ' is not a palindrome';

set @LoopCnt = 0;
set @IsPalindrome = 1;
set @Str1 = 'ABA';

while @LoopCnt < len(@Str1) and @IsPalindrome = 1 and (1 + @LoopCnt < len(@Str1) - @LoopCnt)
begin
select @IsPalindrome = case when substring(@Str1,1 + @LoopCnt,1) = substring(@Str1,len(@Str1) - @LoopCnt,1) then 1 else 0 end;
set @LoopCnt = @LoopCnt + 1;
end

if @IsPalindrome = 1
print @Str1 + ' is a palindrome'
else
print @Str1 + ' is not a palindrome';

set @LoopCnt = 0;
set @IsPalindrome = 1;
set @Str1 = 'ABACDCABA';

while @LoopCnt < len(@Str1) and @IsPalindrome = 1 and (1 + @LoopCnt < len(@Str1) - @LoopCnt)
begin
select @IsPalindrome = case when substring(@Str1,1 + @LoopCnt,1) = substring(@Str1,len(@Str1) - @LoopCnt,1) then 1 else 0 end;
set @LoopCnt = @LoopCnt + 1;
end

if @IsPalindrome = 1
print @Str1 + ' is a palindrome'
else
print @Str1 + ' is not a palindrome';

set @LoopCnt = 0;
set @IsPalindrome = 1;
set @Str1 = 'ABACDDCABA';

while @LoopCnt < len(@Str1) and @IsPalindrome = 1 and (1 + @LoopCnt < len(@Str1) - @LoopCnt)
begin
select @IsPalindrome = case when substring(@Str1,1 + @LoopCnt,1) = substring(@Str1,len(@Str1) - @LoopCnt,1) then 1 else 0 end;
set @LoopCnt = @LoopCnt + 1;
end

if @IsPalindrome = 1
print @Str1 + ' is a palindrome'
else
print @Str1 + ' is not a palindrome';





Lynn Pettis

For better assistance in answering your questions, click here
For tips to get better help with Performance Problems, click here
For Running Totals and its variations, click here or when working with partitioned tables
For more about Tally Tables, click here
For more about Cross Tabs and Pivots, click here and here
Managing Transaction Logs

SQL Musings from the Desert Fountain Valley SQL (My Mirror Blog)
Post #1506454
Posted Sunday, October 20, 2013 11:43 AM


SSC-Dedicated

SSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-Dedicated

Group: General Forum Members
Last Login: Today @ 8:38 AM
Points: 36,979, Visits: 31,502
sqlserver12345 (10/20/2013)
I do not want to use reverse function.please check the code I posted and correct what wrong I did.thanks


I'm curious... please explain why you don't want to use "REVERSE".


--Jeff Moden
"RBAR is pronounced "ree-bar" and is a "Modenism" for "Row-By-Agonizing-Row".

First step towards the paradigm shift of writing Set Based code:
Stop thinking about what you want to do to a row... think, instead, of what you want to do to a column."

(play on words) "Just because you CAN do something in T-SQL, doesn't mean you SHOULDN'T." --22 Aug 2013

Helpful Links:
How to post code problems
How to post performance problems
Post #1506488
Posted Sunday, October 20, 2013 12:13 PM


SSC-Dedicated

SSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-DedicatedSSC-Dedicated

Group: General Forum Members
Last Login: Today @ 8:38 AM
Points: 36,979, Visits: 31,502
sqlserver12345 (10/20/2013)
I do not want to use reverse function.please check the code I posted and correct what wrong I did.thanks


I'm curious... please explain why you don't want to use "REVERSE".

I also have to ask what your intended definition of a "palindrome" actually is. For example, the following is a palindrome.

Madam I'm Adam

None of the solutions so far take into account any punctuation or spaces.

Also, do you consider a single letter to be a palindrome?


--Jeff Moden
"RBAR is pronounced "ree-bar" and is a "Modenism" for "Row-By-Agonizing-Row".

First step towards the paradigm shift of writing Set Based code:
Stop thinking about what you want to do to a row... think, instead, of what you want to do to a column."

(play on words) "Just because you CAN do something in T-SQL, doesn't mean you SHOULDN'T." --22 Aug 2013

Helpful Links:
How to post code problems
How to post performance problems
Post #1506492
« Prev Topic | Next Topic »

Add to briefcase 123»»»

Permissions Expand / Collapse