C 如何把字串識別為函式,C 如何把乙個字串識別為函式

2021-04-01 16:10:32 字數 5727 閱讀 7974

1樓:匿名使用者

#include

#include

#include

int use_foo1_1(int n)

int use_foo1_2(int n)

int use_foo2_1(int n, int m)

int use_foo2_2(int n, int m)

void test1(void)

//由於 map的value部分只能接受一種型別

// use_foo1_1 和 use_foo2_1 不是同一種型別的函式

//所以 儲存函式的指標 使用 void* 這樣就能儲存了,

// 但是通過函式指標呼叫函式的時候需要把 void* 轉換成相對應的指標型別才行

//所以 乙個map結點需要儲存2個內容 函式指標和 轉換函式的型別說明符號

void test2(void)

if(map["aaa"].second == 2)

if(map["bbb"].second == 1)

if(map["bbb"].second == 2)

}//然後乙個更通用的模式

// 要通用 就會碰到 3個問題,boost裡有現成的解決方案 當然你也可以自己想辦法

// 1 函式指標型別 // 用boost::bind 儲存

// 2 函式引數表型別 // 統一成boost::tuple 傳遞時用boost::any

// 3 函式返回值型別 // 統一成引數返回

#include

#include

#include

#include

#include

#include

class foo_container

;template

class foo_handler

: public base_foo_handler //帶返回值的函式包裝

virtual void call(const boost::any& params) const

private:

foo_type _foo;

param_parse_and_call_type _params_parse_and_call;

ret_back_type _ret_back;

};template

class foo_handler

: public base_foo_handler //不帶返回值的函式包裝

virtual void call(const boost::any& params) const

private:

foo_type _foo;

param_parse_and_call_type _params_parse_and_call;

};template

struct params_foo_switch //函式執行的規範函式

template

static void s_params_parse_and_call(const handler_foo& foo, const boost::any& params, const handler_ret_back& ret) //帶返回值 //引數有多少個就補充多少組

};template<>

struct params_foo_switch<1> //函式執行的規範函式(1引數)

template

static void s_params_parse_and_call(const handler_foo& foo, const boost::any& params, const handler_ret_back& ret)

};template<>

struct params_foo_switch<2> //函式執行的規範函式(2引數)

template

static void s_params_parse_and_call(const handler_foo& foo, const boost::any& params, const handler_ret_back& ret)

};template<>

struct params_foo_switch<3> //函式執行的規範函式(3引數)

template

static void s_params_parse_and_call(const handler_foo& foo, const boost::any& params, const handler_ret_back& ret)

};//如要處理4參以上的函式 請自己補充, 一般20參 足夠了copy pase的體力活

typedef boost::shared_ptrfoo_handler_ptr_type;

typedef std::mapmap_type;

typedef map_type::const_iterator map_citer_type;

private:

typedef foo_container this_type;

public:

foo_container(void){}

~foo_container(void){}

template

bool register_foo(const std::string& name, const handler_foo& foo)

template

bool register_foo(const std::string& name, const handler_foo& foo, const handler_ret_back& ret)

template

bool call(const std::string& name, const tuple& params) const

iter->second->call(boost::any(params));

return true;

}private:

template

bool prv_register_foo(const std::string& name, const handler_foo& foo, const handler_params_parse_and_call params)

template

bool prv_register_foo(const std::string& name, const handler_foo& foo, const handler_ret_back& ret,

const handler_params_parse_and_call& params)

private:

map_type _map;

};template

void back_ret(const t& val)

void test3(void)

int main(int argc, char* argv)

vc2010下編譯執行通過 功能擴充 弄清楚後你自己新增

boost版本1.53

2樓:匿名使用者

你的意思是直接寫乙個字串,然後變成乙個函式嗎?你可以使用建立模式,通過工廠加工,又或者使用其他的方法,我覺得你表達不是很清晰

3樓:匿名使用者

.... 這個你自己寫介面吧,if 或者case switch

如何用c/c++把乙個字串把裡邊的數字提取出來

4樓:匿名使用者

#include

int main()

else if((a[i]>='a'&&a[i]<='z')||(a[i]>='a'&&a[i]<='z')) //如果是字母.

}b[cnt_index++]='\0'; //增加字串結束符.

cout<

5樓:匿名使用者

一. 先用 strstr 找到那行 ;

二. 然後 提取出來 用sscanf進行解析 ;

三. 後面的數字不知道的也可以提取出來 ;

四. 可以用 %d 代替,也可以用 string 和 fstream類 還有 getline、

6樓:匿名使用者

#include

#include

using namespace std;

void tiqu(char*a,int*b)else}}

void main()}

7樓:匿名使用者

//支援負數,

末尾數字,stl,c++**。

#include

#include

#include

//string輸入,vector輸出

void get_int(const std::string& s, std::vector& vi)

else}}

}if(now_digit)

}int main(int argc, char *argv)

8樓:

||#include

void sort(int *a,int n);

int main()

for(j=0; j排序

sort(a,i);

//輸出

for(j=0; j a[j])

}if(k != i)}}

僅供參考……

c++中怎麼把乙個字串賦給乙個變數

9樓:匿名使用者

對於string型的變來量,直接賦值即可,源如string str="abcde";使用string類需要使用標頭檔案#include

對於char陣列型的變數,在宣告時可以直接賦值,如char str = "abcde",

對於char陣列型的變數,在非宣告的時候賦值時,不能直接賦值,如char str[64];str = "abcde";是不允許的,需要借助strcpy函式進行賦值,需要使用標頭檔案#include 。使用方法:

char str[64];

strcpy(str, "abcde");//將abcde拷貝到str陣列中。

10樓:風琦凌波

問題一的解決:

這個問題通常有兩種解決方法,乙個是

字元陣列(現已不常用)另回一答個是string類,當然這個要在標頭檔案中加上#include

**如下:

#include

#include

using namespace std;]int main()

11樓:愛做夢的男孩

可以使用:

strcpy(str, "abc");strcpy(str,"abcde");

但是bai

有一點要注意du,str的空間zhi

大小要夠存放後面的字串

dao.

這樣就可以把回abc賦值給str了.

包含答標頭檔案:

#include

字串陣列可以如下定義:

char *str[3]=

如果對str[0]賦值,同樣可以用上面的函式strcpy(str[0], "sfdsfsd");

在c++中,可以使用c++標準庫中的string類,定義string str;

str = "abc";

str = "abcde"

這個要新增如下標頭檔案

#include

using namespace std;

c語言中如何定義字串,C語言中如何定義字串?

可以用陣列或指標 陣列 char s 80 abcd 或者char s 80 說明 自動加字串結束標誌 0 char s 80 指標 char s char s abcd c語言是一門通內用計算機程式設計容語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯 處理低階儲存器 產生少量的機器碼...

C 字串長度與位元組的問題,C 字串有效長度的問題

1 strlen函式是返回字元長度 以空字元為結束符 所以是5 2 sizeof str 返回是指定變數占用空間大小str是指標變數,指標大小為4,所以返回4你可以把str變成陣列 char str 12345 此時str是陣列,所以sizeof str 返回的是6 strlen 函式返回不包含結束...

如何用c語言輸入字串,把裡面連續的數字依次存放到陣列中

夔啟江澄邈 定義一個足夠的陣列,迴圈字元陣列,遇到數字就放到新的陣列中 void main i 0,j 0,x 0 printf 請輸入一串字元 n gets a for p a p 0 p else b i 1 b i 1 10 p 48 x 1 else x 0 for j 0 b j 0 j ...