c++函数怎么ibatis返回string数组组

新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
小富即安, 积分 2410, 距离下一级还需 2590 积分
论坛徽章:5
例如有两个字符串分别为:“abcd”,&efgh&
如何将这两个字符串通过函数返回?
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
小富即安, 积分 4828, 距离下一级还需 172 积分
论坛徽章:1
原帖由 光速 于
11:42 发表
例如有两个字符串分别为:“abcd”,&efgh&
如何将这两个字符串通过函数返回?
可以给函数参数传递两个指针,当然这两个指针要指向实际的存储空间,然后把字符串写入这个这些空间
C++的话可以用string对象来包装char *
稍有积蓄, 积分 207, 距离下一级还需 293 积分
论坛徽章:0
返回一个结构可不。。。
小富即安, 积分 2410, 距离下一级还需 2590 积分
论坛徽章:5
原帖由 openspace 于
11:49 发表
可以给函数参数传递两个指针,当然这两个指针要指向实际的存储空间,然后把字符串写入这个这些空间
C++的话可以用string对象来包装char *
如果字符串数组是动态?
小富即安, 积分 4153, 距离下一级还需 847 积分
论坛徽章:0
这个问题不有点像malloc和strncpy么?要么你保证缓冲区足够大,要么动态分配内存给它。。。
稍有积蓄, 积分 394, 距离下一级还需 106 积分
论坛徽章:0
还是返回指针吧
论坛徽章:0
C语言处处传值,你的要求无法直接完成,但可以传入一个缓冲区的地址,在函数体内对其填充。
富足长乐, 积分 7639, 距离下一级还需 361 积分
论坛徽章:0
可以在堆上分配空间
论坛徽章:0
return&&void **
白手起家, 积分 33, 距离下一级还需 167 积分
论坛徽章:0深入解析C++中的字符数组和处理字符串的方法
投稿:goldensun
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了深入解析C++中的字符数组和处理字符串的方法,需要的朋友可以参考下
C++字符数组
用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符。字符数组具有数组的共同属性。由于字符串应用广泛,C和C++专门为它提供了许多方便的用法和函数。
字符数组的定义和初始化
定义字符数组的方法与前面介绍的类似。例如:
char c[10];
c[0]=′I′;c[1]=′ ′;c[2]=′a′;c[3]=′m′;c[4]=′ ′;c[5]=′h′;c[6]=′a′;c[7]=′p′;c[8]=′p′;c[9]=′y′;
上面定义了c为字符数组,包含10个元素。在赋值以后数组的状态如图所示。
对字符数组进行初始化,最容易理解的方式是逐个字符赋给数组中各元素。如
char c[10]={'I',' ','a','m',' ','h','a','p','p','y'};
把10个字符分别赋给c[0]~c[9]这10个元素。
如果花括号中提供的初值个数大于数组长度,则按语法错误处理。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符。如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。如:
char c[]={'I',' ','a','m',' ','h','a','p','p','y'};
也可以定义和初始化一个二维字符数组,如
代码如下:char diamond[5][5]={{' ',' ','*'},{' ', '*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'}};
字符数组的赋值与引用
只能对字符数组的元素赋值,而不能用赋值语句对整个数组赋值。如:
char c[5];
c={'C','h','i','n','a'}; //错误,不能对整个数组一次赋值
c[0]='C'; c[1]='h';c[2]='i';c[3]='n';c[4]='a'; //对数组元素赋值,正确
如果已定义了a和b是具有相同类型和长度的数组,且b数组已被初始化,请分析:
a=b; //错误,不能对整个数组整体赋值
a[0]=b[0]; //正确,引用数组元素
【例】设计和输出一个钻石图形。
#include &iostream&
void main( )
char diamond[][5]={{' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'}};
for (i=0;i&5;i++)
for (j=0;j&5;j++)
cout&&diamond[i][j]; //逐个引用数组元素,每次输出一个字符
C++处理字符串的方法—字符串类与字符串变量
用字符数组来存放字符串并不是最理想和最安全的方法。
C++提供了一种新的数据类型——字符串类型(string类型),在使用方法上,它和char、int类型一样,可以用来定义变量,这就是字符串变量——用一个名字代表一个字符序列。
实际上,string并不是C++语言本身具有的基本类型,它是在C++标准库中声明的一个字符串类,用这种类可以定义对象。每一个字符串变量都是string类的一个对象。
字符串变量的定义和引用
1) 定义字符串变量
和其他类型变量一样,字符串变量必须先定义后使用,定义字符串变量要用类名string。如:
string string1; //定义string1为字符串变量
string string2=″China″; //定义string2同时对其初始化
应当注意:要使用string类的功能时,必须在本文件的开头将C++标准库中的string头文件包含进来,即应加上
#include &string& //注意头文件名不是string.h
2) 对字符串变量的赋值
在定义了字符串变量后,可以用赋值语句对它赋予一个字符串常量,如:
string1=″Canada″;
既可以用字符串常量给字符串变量赋值,也可以用一个字符串变量给另一个字符串变量赋值。如:
string2=string1; //假设string2和string1均已定义为字符串变量
不要求string2和string1长度相同,假如string2原来是″China″,string1原来是″Canada″,赋值后string2也变成″Canada″。在定义字符串变量时不需指定长度,长度随其中的字符串长度而改变。
可以对字符串变量中某一字符进行操作,如:
string word=″Then″; //定义并初始化字符串变量word
word[2]=′a′; //修改序号为2的字符,修改后word的值为″Than″
3) 字符串变量的输入输出
可以在输入输出语句中用字符串变量名,输入输出字符串,如:
cin&& string1; //从键盘输入一个字符串给字符串变量string1
cout&& string2; //将字符串string2输出
字符串变量的运算
在上一节中可以看到: 在以字符数组存放字符串时,字符串的运算要用字符串函数,如strcat(连接)、strcmp(比较)、strcpy(复制),而对string类对象,可以不用这些函数,而直接用简单的运算符。
1) 字符串复制用赋值号
string1=string2;
其作用与“strcpy(string1,string2);”相同。
2) 字符串连接用加号
string string1=″C++″; //定义string1并赋初值
string string2=″Language″;//定义string2并赋初值
string1=string1 + string2;//连接string1和string2
连接后string1为″C++ Language″。
3) 字符串比较直接用关系运算符
可以直接用 ==(等于)、&(大于)、&(小于)、!=(不等于)、&=(大于或等于)、&=(小于或等于)等关系运算符来进行字符串的比较。
字符串数组
不仅可以用string定义字符串变量,也可以用string定义字符串数组。如:
string name[5]; //定义一个字符串数组,它包含5个字符串元素
string name[5]={″Zhang″, ″Li″, ″Fun″, ″Wang″, ″Tan″}; //定义一个字符串数组并初始化
此时name数组的状况如图所示。
关于字符串数组的几点说明:
在一个字符串数组中包含若干个(现为5个)元素,每个元素相当于一个字符串变量。
并不要求每个字符串元素具有相同的长度,即使对同一个元素而言,它的长度也是可以变化的,当向某一个元素重新赋值,其长度就可能发生变化。
在字符串数组的每一个元素中存放一个字符串,而不是一个字符,这是字符串数组与字符数组的区别。如果用字符数组存放字符串,一个元素只能存放一个字符,用一个一维字符数组存放一个字符串。
每一个字符串元素中只包含字符串本身的字符而不包括′\0′。
可见用字符串数组存放字符串以及对字符串进行处理是很方便的。
在定义字符串数组时怎样给数组分配存储空间呢?实际上,编译系统为每一个字符串变量分配4个字节,在这个存储单元中,并不是直接存放字符串本身,而是存放字符串的地址。在本例中,就是把字符串″Zhang″的地址存放在name[0],把字符串″Li″ 的地址存放在name[1],把字符串″Fun″的地址存放在name[2]……上只是一个示意图。在字符串变量中存放的是字符串的指针(字符串的地址)。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具博客分类:
&&& 同其它变量一样,数组也可以作函数的参数。数组元素只能作函数实参,且同其它变量的用法没有区别。
   我们已经知道,数组元素要通过数组名和相应的下标一个个地引用,而数组名可以作函数的实参和形参。当数组作为函数参数时,调用函数中的实参数组只是传送该数组在内存中的首地址,即调用函数通知被调函数在内存中的什么地方找到该数组。在前面我们已经知道了函数参数的值传递方式,调用函数向被调函数传递数据地址的方式,称之为函数参数的引用传递。
   对于函数参数的引用传递,除传送数组名外,调用函数还必须通知被调函数:数组有多少个元素。所以,有数组参数的函数原型的一般形式为:
   类型说明符 函数名(数组参数, 数组元素个数)
数组参数并不指定数组元素的个数,即[]中是空的,没有数字。例如6-21:
   我们已经知道:函数参数的引用传递不同于值传递。值传递时是把实参的值复制到形参,实参和形参占用不同的存储单元,形参值的改变不会影响到实参。而数组作为函数参数传递时,是引用传递方式,即把实参数组在内存中的首地址传给了形参,被调函数可以通过该地址,找到实参数组中的各个元素。这就意味着:在被调函数中,如果改变了形参数组某元素的值,在被调函数中,实参数组对应元素的值也会发生相应的改变。
#include &iostream.h&
int add(int x, int n)
  return (x + n);
void main()
  int a[10] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
  for( i = 0; i&10; i++)
   a[i]=add(a[i], i); //数组元素作函数参数
  for(i = 0; i&10; i++)
   cout && a[i] &&
double mean(double data_array[], int numelements)
  double sum = 0.0;
  for(int i=0; i& i++)
   sum += data_array[i];
  return sum /
   下面我们看看应该怎样调用上面的mean函数:   &
int main()
  double heights[100];
  int n = 0;
  cout && "Enter heights:" &&
  while(h & 0.0) {
   heights[n] =
   cin &&
  double m = mean(heights, n);
  cout && "The mean is " && m &&
  return 0;
传值调用与传址调用的区别在于,使用传值调用时,函数接收的是函数值的一份拷贝;另一方面,使用传址调用时,函数接收的是变量的内存地址。因此,函数能改变存放于指定内存单元(也就是变量值)的值,所作的改变在函数结束后继续保留下来。
函数参数的引用传递是有用的。例如当数组作函数参数时,仅仅传送数组在内存中的首地址,避免了复制每一个数组元素,可以节省机器的内存和运行时间。另外, 由于函数中return语句只能带回一个返回值,如果被调函数中有多个返回值,我们常常通过数组带回。但对引用传递应该 注意: 被调函数中对形参数椐的不恰当的改变,会破坏调用函数中的实参数据。
用数组作参数,本身就可以改变数组元素的值,不需要再返回数组,况且也不能返回数组,只能是指针。如果array是return在函数中,这在函数执行完后会回收array占用的地址。如果这时return指针的话,只是一个空地址。可以使用static是array成为static local variable,或者new(c++才有new和delete,c中用malloc,释放用free),这样函数完成时不会释放它占用的内存空间。
#include &iostream&
int* foo()
int *arr = new int[10]; //or static int arr[10];
for (int i=0; i&10; i++)
int main(){
int *arr=0;
arr = foo();
for (int i=0; i&10; i++)
cout && arr[i];
或者通过struct, 返回struct中的array。
struct mystruct {
int vector[20];
struct mystruct foo()
...do something nifty with bar...
P.S.
The C language does not let you return an array unless you either
(a) just return a pointer to the type of whatever the array is, and you have to allocate that array, eg you return an "int *".
(b) use a typedef to define the array, and then return that..
typedef int array_int3[4];
array_int3 func(...)
array_int3 ret={1,2,3,4};
数组作为函数参数举例:
1. 顺序查找
   查找是计算机中经常要遇到的一种操作,其含义是在一组数据中查找到待查数据的位置。当一组数据无序时,一般采用顺序查找。顺序查找是把给定的值与这组数据中的每个值顺序比较,如果找到,就输出这个值的位置,如果找不到则报告没有找到。下面是顺序查找的程序:
#include &stdio.h&
#define SIZE 10
//求给定值key的位置,找到则返回其下标,找不到返回-1
int seq_search(int v[],int n,int key) //v[]:数组参数 n:数组元素个数 key:待查的值
  for(i = 0;i &i ++)
   if(key == v[i])
  return -1; //没找到
void main(void)
  int d[SIZE],KEY,i,
  printf("Input %d numbers:\n",SIZE);
  for(i = 0;i & SIZE;i ++)
   scanf("%d",&d[i]);
  printf("Input a key you want to search:\n");
  scanf("%d",&KEY);
  index = seq_search(d,SIZE,KEY);
  if(index &= 0)
   printf("The index of the key is %d.\n",index);
   printf("Not found.\n");
运行该程序并输入:
   Input 10 numbers:
   1 2 3 4 5 6 7 8 9 0↙
   Input a key you want to search:
输出结果为:
   The index of the key is 5
   本程序中使用了一个数组作为参数,函数seq_search中形参v没有指定数组的长度,要处理的元素的个数由其后所跟的参数n决定。
2. 把一个字符串反序后输出&
#include &iostream.h&
#include &string.h&
#define LENGTH 80
//反序一个字符串
void reverse(char s[])
  int i,j;
  j = strlen(s) - 1;
  for(i = 0;i &i ++)
   c = s[i];
   s[i] = s[j];
   s[j] =
   j --;
void main(void)
  char str[LENGTH + 1];
  cout&&"Input a string:";
  reverse(str);
  cout&&"The string is reversed:"&&str&&
运行该程序并输入:
   Input a string:abcd↙
  运行结果为:
   The string is reversed:dbca
   这个程序中,函数reverse没有指定数组元素个数的参数,这是因为字符串总是以一个'{content}'结束,通过'{content}'就可以得到字符数组中元素的个数,也就是字符串的长度,这里我们可以看到使用字符串结束标识的好处。
二维数组也可作为函数参数,第一维的大小可以省略,而第二维的大小不能省略。下面是一个二维数组作为函数参数的例子:
#include &stdio.h&
void main()
  void add(int x[][4], int n, int num);
  void print(int x[][4], int n);
  int a[3][4]={{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
  int number=10;
  add(a, 3, number);
  print(a, 3);
void add(int x[][4], int n, int num)
  for(int i = 0; i&n; i++)
  for(int j = 0; j&4; j++)
  x[i][j] = x[i][j]+
void print(int x[][4], int n)
  for(int i = 0; i&n; i++)
  for(int j = 0; j&4; j++)
  printf("%4d\n", x[i][j]);
浏览 14279
浏览: 646689 次
来自: 太原
感谢楼主,查了半天终于发现居然是htmlentities()做 ...
这本书的名字 有谁知道????~~~
怎么下载啊
没有内容啊
谢谢先 先看看}

我要回帖

更多关于 函数返回类型string 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信