SOGO論壇
  登入   註冊   找回密碼
查看: 1234|回覆: 1
列印 上一主題 下一主題

[程式設計] C++輸入字串的問題 [複製連結]

Rank: 2

狀態︰ 離線
跳轉到指定樓層
1
發表於 2011-1-29 12:24:12 |只看該作者 |倒序瀏覽
首先我是用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或即時通..
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

Rank: 2

狀態︰ 離線
2
發表於 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 編輯 》
已有 1 人評分威望 收起 理由
紅塵孤鳥 + 2 感謝您熱心幫助會員解決問題,論壇需要您 ...

總評分: 威望 + 2   查看全部評分

請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-5-5 15:07

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部