ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingใครมีวิธีแปลง int เป็น string ของ ภาษา c/c++ มั้งครับ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: ใครมีวิธีแปลง int เป็น string ของ ภาษา c/c++ มั้งครับ  (อ่าน 11336 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
qwerty
Newbie
*

พลังน้ำใจ: 8
ออฟไลน์ ออฟไลน์

กระทู้: 65



ดูรายละเอียด
« เมื่อ: 15 มีนาคม 2011, 17:18:18 »

คือว่าอยากแปลงแบบนี้ครับ
String="((5+5)*6)/2"
อยากแปลงให้เป็น int อ่ะครับ คือแปลงแลวให้มันเป็นผลลัพธ์เลยอ่ะครับ ไม่รู้ต้องทำไง
บันทึกการเข้า
saparee
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 319
ออฟไลน์ ออฟไลน์

กระทู้: 1,923



ดูรายละเอียด
« ตอบ #1 เมื่อ: 15 มีนาคม 2011, 17:24:29 »

แล้วทำไมไม่เก็บเป็น int ซะเลยหล่ะครับ?
บันทึกการเข้า
qwerty
Newbie
*

พลังน้ำใจ: 8
ออฟไลน์ ออฟไลน์

กระทู้: 65



ดูรายละเอียด
« ตอบ #2 เมื่อ: 15 มีนาคม 2011, 17:30:07 »

คือผมรับค่านี้มาจาก text file อ่ะครับ แล้วทีนี้ text ไฟล์มันก็ต้องเก็บเป็น string อ่ะครับ
บันทึกการเข้า
BeerKingMan
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 262
ออฟไลน์ ออฟไลน์

กระทู้: 1,605



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 15 มีนาคม 2011, 17:35:52 »

คือว่าอยากแปลงแบบนี้ครับ
String="((5+5)*6)/2"
อยากแปลงให้เป็น int อ่ะครับ คือแปลงแลวให้มันเป็นผลลัพธ์เลยอ่ะครับ ไม่รู้ต้องทำไง

ถ้าจำไม่ผิด String มันเก็บค่าเป็นแบบ aray 1 มิติใช่ป่ะครับ

เราก็ดึงเป็นตำแหน่งมาเลยได้ป่ะครับ พอดึงแยกมาเป็นตัวแล้ว ก็เอามาแปลงเป็น int โดยใช้เงือนไขอะไรก็ได้ แล้วแต่ท่านจะคิดเลย  wanwan003
บันทึกการเข้า
saparee
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 319
ออฟไลน์ ออฟไลน์

กระทู้: 1,923



ดูรายละเอียด
« ตอบ #4 เมื่อ: 15 มีนาคม 2011, 17:38:44 »

ไปเจอมาเผื่อช่วยได้   Tongue
โค๊ด:
#include <stdlib.h> 
#include <iostream.h>
#include <string>

int GetIntVal(string strConvert) {
  int intReturn;

  // NOTE: You should probably do some checks to ensure that
  // this string contains only numbers. If the string is not
  // a valid integer, zero will be returned.
  intReturn = atoi(strConvert.c_str());

  return(intReturn);
}
บันทึกการเข้า
BeerKingMan
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 262
ออฟไลน์ ออฟไลน์

กระทู้: 1,605



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 15 มีนาคม 2011, 17:40:49 »

ไปเจอมาเผื่อช่วยได้   Tongue
โค๊ด:
#include <stdlib.h> 
#include <iostream.h>
#include <string>

int GetIntVal(string strConvert) {
  int intReturn;

  // NOTE: You should probably do some checks to ensure that
  // this string contains only numbers. If the string is not
  // a valid integer, zero will be returned.
  intReturn = atoi(strConvert.c_str());

  return(intReturn);
}


ไม่ได้ครับ เพราะ ข้อมูที่เก็บมามี ( ) * / ด้วย สัญลักพวกนี้หาก return เป้น int จะกลายเป็นจำนวนๆนึงเรียกว่า เลข ASCII
บันทึกการเข้า
amazegu
สมุนแก๊งเสียว
*

พลังน้ำใจ: 80
ออฟไลน์ ออฟไลน์

กระทู้: 875



ดูรายละเอียด
« ตอบ #6 เมื่อ: 15 มีนาคม 2011, 18:25:13 »

ลองหา Data Structure มาอ่านดูคับ เรื่อง prefix postfix นี่แหละ จำไม่ค่อยได้แล้ว ลืมๆ ไม่ได้ใช้นานคับ
บันทึกการเข้า
ohmohm
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 170
ออฟไลน์ ออฟไลน์

กระทู้: 3,098



ดูรายละเอียด เว็บไซต์
« ตอบ #7 เมื่อ: 15 มีนาคม 2011, 18:46:05 »

( ทบทวนความรู้หน่อย ) c/c++ ดูเหมือนว่ามันไม่มี eval() อาจต้องทำ parser เองนะ ใช้พวก bison
http://www.cs.utah.edu/dept/ol...texinfo/bison/bison.html#SEC27 ( ดูที่ Infix Notation Calculator: calc )

หรืออีกวิธีกว่านั้น
http://en.wikipedia.org/wiki/Reverse_Polish_notation#Example
http://en.wikipedia.org/wiki/S...nting-yard_algorithm#C_example
จาก จขกท มันเป็นแบบ infix notation ถ้าเราแปลงให้เป็น Reverse Polish notation ก็จะคำนวณด้วย stack calculator ได้ไม่ยาก
บันทึกการเข้า
goto69
คนรักเสียว
*

พลังน้ำใจ: 3
ออฟไลน์ ออฟไลน์

กระทู้: 120



ดูรายละเอียด
« ตอบ #8 เมื่อ: 18 มีนาคม 2011, 08:09:41 »

สร้างตัวแปรมาใหม่ครับ

var x=""+ ((5+5)*6)/2

ให้ข้างหน้าเปน string แล้วตัวแปรท่านจะเปนสตริงเอง
บันทึกการเข้า

.
bonshington
ก๊วนเสียว
*

พลังน้ำใจ: 47
ออฟไลน์ ออฟไลน์

กระทู้: 376



ดูรายละเอียด
« ตอบ #9 เมื่อ: 18 มีนาคม 2011, 12:45:14 »

การบ้านวิชา data structure หรอคับ?
วิธีคำนวณคือ เปลี่ยนเครื่องหมายให้เป็น postfix เรียงตาม prior แล้วยัดใส่ stack

เช่น a + b จะได้ ab+

จากนั้น pop ขึ้นมาคำนวณ
ลองดูคับ ตอนผมทำครั้งแรก ใช้เวลาทำ 4 ชม หนุกหนานอยู่
บันทึกการเข้า
protoad56
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 1



ดูรายละเอียด
« ตอบ #10 เมื่อ: 19 มีนาคม 2011, 09:38:21 »

การบ้านคุณกรุณาทำเอง แต่แนะนำให้ไปหาคำว่า stack calculator implement in c จะพบเฉลยอยู่มากมายเต็ม google  wanwan007
บันทึกการเข้า
ohmohm
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 170
ออฟไลน์ ออฟไลน์

กระทู้: 3,098



ดูรายละเอียด เว็บไซต์
« ตอบ #11 เมื่อ: 19 มีนาคม 2011, 16:47:26 »

แปลง infix ให้เป็น postfix มัน algorithm ยากเหมือนกันนะ
ลองถอด algorithm บางส่วน มาเป็น Javascript ( มีแค่ browser ใกล้ๆ ตัว )
คงเอาไปดัดแปลงเป็น C ไม่ยากมาก
โค๊ด:
<html>
<head>
<script type="text/javascript">
function pushgo()
{
  document.getElementById("reslt").innerHTML = shuntcalc( document.getElementById("toks").value ) ;
}

// s is array for stack, sp is stack pointer, t is operator
function calcstacknum( s , sp , t )
{
  if ( t == ' ' )
  {
    s[sp-2] = Number( s[sp-2] )   Number( s[sp-1] );
  }
  else   if ( t == '-' )
  {
    s[sp-2] = Number( s[sp-2] ) - Number( s[sp-1] );
  }
  else   if ( t == '*' )
  {
    s[sp-2] = Number( s[sp-2] ) * Number( s[sp-1] );
  }
  else   if ( t == '/' )
  {
    s[sp-2] = Number( s[sp-2] ) / Number( s[sp-1] );
  }
 // all operations, pop 2 items from stack then operate then push result back to stack

  return sp - 1 ;
}

function shuntcalc ( inp )
{
var ops = "";
var i;
var stack_oper = Array (); //stack for operators
var stack_oper_p = 0;

var stack_num = Array ();
var stack_num_p = 0;


var t = inp.split(" "); // now t is array that contains tokens

for( i=0; i<t.length ; i  )
{
   if ( t[i] == '(' ) // push ( to stack for operators
   {
     stack_oper[stack_oper_p  ] = t[i];
   }
   else if ( t[i] == ')' ) // pop stack for operators until found ( but not show (
   {
      while ( stack_oper_p > 0 )
      {
         if ( stack_oper[--stack_oper_p] != '(' )
         {
          stack_num_p = calcstacknum ( stack_num , stack_num_p , stack_oper[stack_oper_p] );
         }
      }
   }
   else if ( t[i] == ' ' || t[i] == '-' || t[i] == '*' || t[i] == '/'  )
   {
     if ( stack_oper_p > 0 )
     {
        if (( t[i] == ' ' || t[i] == '-' ) && ( stack_oper[ stack_oper_p - 1 ] != '(' ))
        {
          --stack_oper_p;
          stack_num_p = calcstacknum ( stack_num , stack_num_p , stack_oper[stack_oper_p] );

        }
     }
     // push that operator to stack for operators
     stack_oper[stack_oper_p  ] = t[i];
   }
   else // assume number, take it to output
   {
     stack_num[stack_num_p  ] = t[i];
   }
}


// pop all in stack for operators
while ( stack_oper_p > 0 )
{
   --stack_oper_p;
   stack_num_p = calcstacknum ( stack_num , stack_num_p , stack_oper[stack_oper_p] );
}


return stack_num[0];

}


</script>
</head>
<body>


<input id="toks" type="text" value="a" />
<button type="button" onclick="pushgo()">Go</button>
<p id="reslt"></p>

</body>
</html>
ใครอยากลอง ก็ save ใน code ให้เป็น html แล้วคลิ๊กเลย ได้แค่   - * / ( ) ต้องเว้นวรรค 1 อักษรเท่านั้นด้่วย และห้ามมี space ตามหลัง
บันทึกการเข้า
zenithsoul
Verified Seller
ก๊วนเสียว
*

พลังน้ำใจ: 56
ออฟไลน์ ออฟไลน์

กระทู้: 293



ดูรายละเอียด
« ตอบ #12 เมื่อ: 20 มีนาคม 2011, 17:15:54 »

ทำ stack การบวก ลบหรือครับ  Tongue
บันทึกการเข้า
360mins
ก๊วนเสียว
*

พลังน้ำใจ: 25
ออฟไลน์ ออฟไลน์

กระทู้: 420



ดูรายละเอียด เว็บไซต์
« ตอบ #13 เมื่อ: 20 มีนาคม 2011, 21:51:37 »

เป็นสตริงมาทั้งดุ้นแบบนี้ สำหรับสมองอันน้อยนิดของผมก็จะตัดสตริงทีละตัว เช็คว่าเป็นตัวเลขหรือเครื่องหมาย ถ้าเป็นตัวเลข ก็เช็คตัวต่อไปว่าเป็นตัวเลขหรือเครื่องหมาย
ถ้าตัวเลขก็เอามาต่อตัวเลขก่อนหน้านั้นแต่ถ้าเป็นเครื่องหมายก็เช็คสตริงว่าเป็นเครื่องหมายอะไรก็ส่งไปเงื่อนไขนั้น แล้วก็เช็คตัวเลขถัดไปบลาๆ จนกว่าจะหาสตริงไม่เจอ งงมั้ย
ผมยังงงเลย  Tongue
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
พิมพ์