想請問有關字串的分解程式??

2009-11-13 7:42 pm
我在VC裡面寫了這樣的程式
我想將"169.254.1.10" 這些字串分解成 169 254 1 10
這是以下程式!!
char *x=(char *)malloc( sizeof(char)*100 );
char *z;
int k;
strcpy(x, "169.254.1.10");
z = strtok( x, ".");
CString s;
s.Format("%s",z);
AfxMessageBox(s);

但我輸出只能輸出 169
卻不能輸出 254 1 10 這3各值
要如何改才會出現這3各值??
更新1:

大大再請問一下 你說的這各s4[i ++] 它可以秀出ip的4各值 但要如何在把他存在陣列裡面?? 我存進去好像怪怪的!!! 我是讓 for(i=0;i<=3;i++) s5[i]=s4[i ++];

回答 (4)

2009-11-13 10:34 pm
✔ 最佳答案
// Visual Studio
// Headers and Macros
#ifndef _MSC_VER
#undef NULL
#define NULL 0
#endif
#include <iostream>
#include <cstdlib>
using namespace std;
//
#include <cstring>
#include <string>
//class CHW
//{
//public:
// CHW(void){}
// // Rule of Three in C++
// // 1. Copy Constructor
// CHW(CHW& clone){}
// // 2. Copy Assignment Operator
// CHW& operator=(CHW& clone)
// {
// if ( this != &clone ){}
// return *this;
// }
// // 3. Destructor
// ~CHW(){}
//private:
//};
//Main Function
#ifndef _MSC_VER
int
#else
void
#endif
main(int argc, char** argv)
{
//==START==//
char str[] = "012.345.678.xxx";
const char* tok = ".";
char* p = NULL;
string s4[4];
int i = 0;
cout<<str<<endl;
p = strtok( str, tok);
while ( p != NULL )
{
s4[i] = p;
cout<<s4[i ++]<<endl;
p = strtok( NULL, tok);
}
p = NULL;
s4->clear();
//==END==//
system("PAUSE");
return
#ifndef _MSC_VER
EXIT_SUCCESS
#endif
;
}



2009-11-13 14:42:42 補充:
錯誤:s4->clear();
修正:
for ( int I = 0; I < 4; I ++)
{
s4[I].clear();
}
說明:其實不用多寫 s4[I].clear(); 以及 for 迴圈,因為 s4 可以當成區域變數,不用去刻意解構或是清除它,除非有用到指標或是做其他除錯動作才要做清除。

2009-11-16 18:22:05 補充:
你的程式碼有錯誤:s5[i]=s4[i ++];
原因:因為計數器 i 已經由 for 迴圈做累加的動作,你不能要求計數器 i 在指定字串時再做一次累加的動作!

2009-11-19 21:23:17 補充:
錯誤觀念?
我的程式碼違反了哪項規則?

2009-11-20 16:41:03 補充:
又不是在寫大型程式與 win32 視窗程式……
2009-11-21 3:01 am
馬步不穩,練不好拳!

你最近一直用來回答的架構,
照示你對 class, NULL, constructor, compiler compatiblilty, OS 等的基本觀念根本有問題!
2009-11-18 4:34 am
小羊的程式有不止兩處嚴重的錯誤觀念!
請不要參考!

2009-11-20 12:42:18 補充:
參考 http://tw.knowledge.yahoo.com/question/question?qid=1509111905902 兩位高手對你的程式的評語,好好反省一下吧!
2009-11-13 10:06 pm
大大要抓 ip 是嗎 ??? 我用比較笨的方法, 大大可以試一下



strcpy(x,雙引號 169.254.1.10 雙引號);
k=0;
for (k=0;k&amp;lt;256;k++)
{ if (x[k]== 單引號 反斜線 0 單引號)
break
if (x[k]== 單引號 . 單引號)
x[k]=單引號 反斜線 0 單引號;
}
再用 sscanf 去分解 字串 x 即可


收錄日期: 2021-04-27 17:15:22
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20091113000015KK02509

檢視 Wayback Machine 備份