C++语言基础-字串操作函数

如果你用过具有string数据类型的编程语言,你可能很不习惯,别人也有同感,所以标准C语言库中提供了几个字串操作函数。表1.3列出了最常用的字串操作函数及其用法说明。关于每个函数的详细说明和实例,见C++ Builder联机帮助。
表1.3字串操作函数
函数 说明
strcat() 将字串接合到目标字串的末尾
strcmp() 比较两个字串是否相等
strcmpi() 比较两个字串是否相等,不考虑大小写
strcpy() 将字串内容复制到目标字串中
strstr() 扫描字串中第一个出现的字串
strlen() 返回字串长度
strupr() 将字串中的所有字符变成大写
sprintf() 根据几个参数建立字串
说明 这里介绍的字串操作是C语言中的字串处理方法。大多数C++编译器提供了cstring类,可以简化字串的处理(C++ Builder的Visual构件库中有个AnsiString类,可以处理字串操作。C++ Builder联机帮助中详细介绍了AnsiString类)。尽管C语言中的字串处理方法比较麻烦,但并不过时,C++编程人员经常在使用cstring类和AnsiString类等字串类的同时使用C语言中的字串处理方法。这里不想对表中的每个函数进行举例说明,只想举两个最常用的函数。strcpy()函数将一个字串复制到另一字串中,源字串可以是变量或直接字串。例如下列代码:
//set up a string to hold 29 characters
char buff[30];
//copy a string literal to the buffer
strcpy (buff,"This is a test.");//display it
cout << buff << end;
//initialize a second string buffer
char buff2[]="A second string.";
//copy the contents of this string to the first buffer
strcpy (buff,buff2);
cout << buff << end1;
字符数组中比数字数组中更容易重载数字末尾。例如下列代码:
char buff[10]= "A string";// later....
strcpy(buff,"This is a test."); //oops!
这里建立了放10个字符的字符数组,最初指定需要9个字节的字符串(记住终止null)。后来可能忘记了数组长度,将需要16个字节的字串复制到了缓冲区,对数组重载了六个字节。这个小小错误就擦去了某个内存位置上的六个字节。所以将数据复制到字符数组中时要特别小心。另一个常用的字串函数是sprintf()。这个函数可以混合文本和数字建立格式化字串。下面例子将两个数相加,然后用sprintf()建立字串以报告结果:
char buff[20];
int x = 10 * 20;
sprintf(buff,"The result is: %d",x);
cout << buff;
执行这个码段时,程序显示下列结果:The result is:200
本例中%d告诉sprintf()函数此处有个整型值,格式字串末尾插入变量x,告诉sprintf()在字串的这个位置放上变量x的值。sprintf()是个特别的函数,可以取多个变元。你必须提供目标缓冲区和格式字串,但格式字串后面的变元数是个变量。下面的sprintf()例子用了另外三个变元:
int x = 20;
int y = 5;
sprintf(buff, "%d + %d", x, y, x + y);
cout << buff;
执行这个码段时,屏幕上显示的结果如下:20 + 5 = 25
说明 C++字串中的单斜杠表示特殊字符。例如,'\n'表示新行符,'\t'表示跳表符。为了在字串中放上实际的斜杠,要用双斜杠如下:
strcpy(fileName, "c:\\windows\\system\\win.ini");
许多编程人员因为忘了这个简单的事实而夜不能寐,苦苦折腾。这是个常见的错误,别说我没有告诉你。sprintf()有个兄弟叫wsprintf(),是Windows版的sprintf().Windows程序中可能同时用这两个函数。wsprintf()与sprintf()的作用相似,唯一的差别是不能在格式字串中放上浮点数。C++ Builder程序中两个函数均可使用,但用sprintf()更好,因为它完全支持浮点数(还可以少输入一个字符)。关于sprintf()的进一步介绍,见C++ Builder联机帮助。

字串数组不仅可以有字符数组,还可以有字符数组的数组(即字串数组)。这听起来有点复杂,其实前面的Argstest程序中已经用过。这类数组可以分配如下:
char strings[][20] = {
"This is string 1",
"This is string 2",
"This is string 3",
"This is string 4"};
这个代码生成四个字串的数组,每个字串最多放19个字符。尽管可以使用这种字串数组,但C++ Builder中还有更简单的字串数组处理办法(将在后面介绍C++ Builder时介绍)。说明 如果经常用到字串数组,应当看看标准模板库(STL).STL提供了比用C语言式字符数组更方便地存放和操作字串数组的方法.STL中还有个string类。

时间: 2024-07-29 18:53:36

C++语言基础-字串操作函数的相关文章

C语言基础之文件操作基本常识

  我们都知道,在C语言中,文件操作都是由库函数来完成的.下面会给大家介绍到输入输出等函数,供参考 . 由于程序中经常有大量对文件的输入输出操作,它经常构成了程序的主要部分,因而C语言提供了很多输入输出的函数,它们分别用于两种类型文件输入输出系统:即由ANSI标准定义的缓冲文件(也称标准文件(流)输入输出(I/O)系统);另一类是ANSI标准中没有定义的非缓冲文件(也称非标准文件(流)输入输出(I/O)系统). 我们已经熟悉了通过键盘和显示器进行输入输出的一些函数,如scanf(),printf

c语言编程-关于文件操作函数rename与remove

问题描述 关于文件操作函数rename与remove 我把文件指针都关闭了,可是调用rename(重命名文件)和remove(删除文件)函数都不起作用?把中间对文件的操作注释掉也一样,不知道哪里出了问题...两个函数的返回值都是-1,我也去查了原因,网络上讲解的好像都不是呀 解决方案 void onMenuDele(char *id) { FILE *p=fopen("f:employee.txt","r"); //打开文件 if(p==NULL) { printf

c语言中的字符串操作函数

函数名: stpcpy 功  能: 拷贝一个字符串到另一个 用  法: char *stpcpy(char *destin, char *source); 程序例: #include <stdio.h> #include <string.h> int main(void) {    char string[10];    char *str1 = "abcdefghi";    stpcpy(string, str1);    printf("%s/n

Informix 4GL写的转换成大写金额字串的函数

####################################### ##这个函数输入金额,返回大写汉字金额## ##bellchiuATNanJingCITIC :em13: ## ####################################### FUNCTIONF_CONV_GB(pf_money) DEFINEpf_moneyDECIMAL(14,2) DEFINEll_money INTEGER DEFINEi SMALLINT DEFINEli_bit SMAL

C++语言基础 例程 内置函数

贺老师的教学链接 例:函数指定为内置函数 #include <iostream> using namespace std; inline int max(int,int,int); int main( ) { int i=10,j=20,k=30,m; m=max(i,j,k); cout<<"max="<<m<<endl; return 0; } inline int max(int a,int b,int c) { if(b>a

会自动补充的字串截取函数

PHP的优点之一是速度很快,对于一般的网站应用,可以说是已经足够了.不过如果站点的访问量很高.带宽窄或者其它的因素令服务器产生性能瓶颈的时候,你可能得想想其它的办法来进一步提高PHP的速度了.这篇文章将从几个方面介绍如何做到这一点,从而令用户浏览的时候更加"爽". 代码优化 在这里并不想再次告诉你 如何写更干净的代码,这一点我想每个人都清楚,在需要速度的时候,你可能已经在PHP源代码的优化上面做了不少的工作,这里所提出的是,这个烦琐的工作可以交由其它工具来完成.这就是Zend Opti

Inno Setup:获取isl中的多国语言字串

原文 http://zwkufo.blog.163.com/blog/static/25882512010101041626803/?suggestedreading&wumii 用InnoSetup做安装包的时候,在iss文件中写[Code]经常会用MessageBox,像是这样: [Code]function InitializeSetup(): boolean;begin  if MsgBox('确定安装Eee Docking?', mbInformation, MB_OKCancel) 

Android笔记之:深入为从右向左语言定义复杂字串的详解_Android

我们所使用的语言,无论是中文还是英语,都是从左向右读的(Left-To-Right),因此我们已经十分习惯了从左向右读(Left-To-Right).一旦遇到了从右向左读的(Right-To-Left),便会十分的不习惯,甚至比见到火星文还难受.光看着就令人难受了,但更让人崩溃的是,还要为应用去定义Arabic语言的字串,也就是为应用添加Arabic语言支持,不但要查看大量的Arabic天书,还要处理一些复杂的字串.对于Right-To-Left的语言,最理想就是以下二种Case,它不需要特别的

高效操作字串的String Reference类

如下面的代码中一个函数接受一个std::string常量引用,在其函数内部需要使用std::string的一些函数操作字串. void foo(const std::string& param) { ...... } 参数使用的是常量引用,如果传入一个std::string就不需要额外的拷贝.但是如果调用时传入的是一个字串常量,这时必然会生成一个std::string对象,并且会有一次内存拷贝. 关于字串发生拷贝可以使用下面的代码测试: #include <string> namesp