SOGO論壇

標題: C++輸入字串的問題 [列印本頁]

作者: jeff159    時間: 2011-1-29 12:24:12     標題: C++輸入字串的問題

首先我是用char arri[39] 宣告一個空的儲存格總共要用39個位置來輸入IPV6的儲存格
問題一:接著我的程式要輸入IPV6的位置  EDEC:BA98:0074:3210:000F:BBFF:0000:FFFF
要怎麼去輸入?除了iostream還需要引用什麼標頭擋?
問題二:IPV6有一個簡化規則,那我輸入成功以後我要怎麼用程式去判斷那些簡化規則?
例如上面那段IP 我要怎麼檢察0000變成0而已?
如果是EDEC:BA98:0074:3210:0000:0000:0000:FFFF
簡化的過程是先把4個0的變成1個0→EDEC:BA98:0074:3210:0:0:0:FFFF
接著把中間的一串0簡化成兩個冒號→EDEC:BA98:0074:3210::FFFF

這樣要怎麼用code表示?


我只要部分程式碼就好
最主要是我這一段不知道怎麼表示

如果有高手可以讓我問的話也可以用短信跟我講msn或即時通..
作者: zx780411    時間: 2011-7-12 00:28:43

第一個問題:
我比較少用C++但是我自己在寫C的時候只要用到這一類型陣列存值我都還會include string.h這類的函式庫  這邊提供給你網這方面去找找

第2個問題:
因為你現在格式式固定的 所以你可以直接用位置去求值 例如  EDEC:BA98:0074:3210:000F:BBFF:0000:FFFF
這段IP中的arri[30]~arri[33]昰一組 那將每個字元取出來轉換成對應的數值(例如atoi(arri[30]) 像C語言中有atoi這類的指令可以使用) 如果是其它 英文字母的就得自己寫個function將他從16進位轉回10進位再運算了 不過看樣子你似乎只是要處理0000這種特殊的情況所以用 atoi指令加上幾個if判別式應該足以應付

我的大致方法如下(非程式碼 純為概念):
if( atoi(arri[30])=0 and atoi(arri[31])=0 and atoi(arri[32])=0 and atoi(arri[33])=0)
{
  for( i= 30,j=34;j<39;i++,j++)
   {
     arri(i)=arri(j);//我不用中誇號改用小誇號代替  因為論壇的語法""昰表示斜體 會把要表達的字吃掉= =" by zx780411 2011/07/12/20:08
   }
}

大致上是這樣 有問題可以私信給我討論看看  希望有幫到你^^

《 本帖最後由 zx780411 於 2011-7-12 20:08 編輯 》




歡迎光臨 SOGO論壇 (https://oursogo.com/) Powered by OURSOGO.COM