c 语言中的字符串操作
2010-03-11 11:20
134 查看
http://blog.chinaunix.net/u1/41817/showart_342390.html
6.5
怎样将字符串打印成指定长度
?
如果要按表格形式打印一组字符串,你就需要将字符串打印成指定长度。利用
printf()函数可以很方便地实现这一点,请看下例
:
# include <stdio. h>
char * data[25] = {
"REGION", "--Q1--", "--Q2--", "--Q3--", "--Q4--",
"North" , "10090. 50" , "12200. 10" , "26653.12" , "62634. 32" ,
"South", "21662.37", "95843.23", "23788.23", "48279.28",
"East", "23889.38", "23789.05", "89432.84", "29874.48",
"West", "85933.82", "74373.23", "78457.23", "28799.84" };
void main (void) ;
void main (void)
{
int x;
fox (x = 0, x<25; x+ + )
{
if ((x % 5) == 0&&(x !=0))
printf("/n");
printf (" %-10. 10s" , data[x]) ;
}
}
在上例中,字符串数组
char *data[]中包含了某年
4个地区的销售数据。显然,你会要求按表格形式打印这些数据,而不是一个挨一个地毫无格式地打印这些数据。因此,上例中用下述语句来打印这些数据:
printf("%-10.
10s",
data[x]);
参数
"%-10.
10s"指示
printf()函数按
10个字符的长度打印一个字符串。在缺省情况下,
printf()函数按右对齐格式打印字符串,但是,在第一个
10的前面加上减号
(-)后,
prinft()函数,就会使字符串左对齐。为此,
printf()函数会在字符串的尾部加入空格,以使其长度达到
10个字符。上例的打印输出非常整洁,类似于一张表格,如下所示:
REGION
--Q1--
--Q2--
--Q3--
--Q4--
North
10090.50
12200.10
26653.12
62634.32
SOuth
21662.37
95843.23
23788.23
48279.28
East
23889.38
23789.05
89432.84
29874.48
West
85933.82
74373.23
78457.23
28799.84
请参见:
6.
4怎样使字符串右对齐
?
6
.
6
.怎样拷贝字符串的一部分
?
利用标准库函数
strncpy(),可以将一字符串的一部分拷贝到另一个字符串中。
strncpy()函数有
3个参数:第一个参数是目录字符串;第二个参数是源字符串;第三个参数是一个整数,代表要从源字符串拷贝到目标字符串中的字符数。以下是一个用
strncpy()函数拷贝字符串的一部分的例子:
# include <stdio. h>
# include <string. h>
void main(void);
void main (void)
{
char * source_str = "THIS IS THE SOURCE STRING" ;
char dest_strl[40]= {0}, dest_str2[40]= {0};
/ * Use strncpy() to copy only the first 11 characters. * /
strncpy(dest_strl, source-str, 11);
printf("How about that! dest-strl is now: '%s'!!!/n", dest-strl);
/ * Now, use strncpy() to copy only the last 13 characters. * /
strncpy(dest_strl, source_str + (strlen(source_str)-l3) , 13);
printf("Whoa! dest_str2 is now: '%s'!!!/n". dest_str2);
}
在上例中,第一次调用
strncpy()函数时,它将源字符串的头
11个字符拷贝到
dest_str1中,这是一种相当直接的方法,你可能会经常用到。第二次调用
strncpy()函数时,它将源字符串的最后
13个字符拷贝到
dest_str2中,其实现过程为:
(1)用
strlen()函数计算出
source_str字符串的长度,即
strlen(source_str)。
(2)将
source_str的长度减去
13(13是将要拷贝的字符数
),得出
source_str中剩余的字符数,即
pstrlen(source_str)-13。
(3)将
strlen(source_str)-13和
source_str的地址相加,得出指向
source_str中倒数第
13个字符的地址的指针,即
source_str+(strlen(source_str)-13)。这个指针就是
strncpy()函数的第二个参数。
(4)在
strncpy()函数的第三个参数中指定要拷贝的字符是
13。
上例的打印输出如下所示:
How about that! dest_str1 is now:
'THIS IS THE'!!!
Whoa! dest_str2 is now:
'SOURCE STRING'!!!
需要注意的是,在将
source_str拷贝到
dest_strl和
dest_str2之前,
dest_strl和
dest_str2都要被初始化为
null字符
(/0)。这是因为
strncpy()函数在拷贝字符串时不会自动将
null字符添加到目录字符串后面,因此你必须确保在目标字符串的后面加上
null字符,否则会导致打印出一些杂乱无章的字符。
请参见;
6.
1
串拷贝
(strcpy)和内存拷贝
(memcpy)有什么不同
?它们适合于在哪种情况下使用
?
6.
9
怎样打印字符串的一部分
?
6.6
怎样将数字转换为字符串
?
C语言提供了几个标准库函数,可以将任意类型
(整型、长整型、浮点型等
)的数字转换为字符串。以下是用
itoa()函数将整数转换为字符串的一个例子:
# include <stdio. h>
# include <stdlib. h>
void main (void);
void main (void)
{
int num = 100;
char str[25];
itoa(num, str, 10);
printf("The number 'num' is %d and the string 'str' is %s. /n" ,
num, str);
}
itoa()函数有
3个参数:第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转移数字时所用的基数。在上例中,转换基数为
10。
下列函数可以将整数转换为字符串:
----------------------------------------------------------
函数名
作
用
----------------------------------------------------------
itoa()
将整型值转换为字符串
itoa()
将长整型值转换为字符串
ultoa()
将无符号长整型值转换为字符串
----------------------------------------------------------
请注意,上述函数与
ANSI标准是不兼容的。能将整数转换为字符串而且与
ANSI标准兼容的方法是使用
sprintf()函数,请看下例:
#include<stdio.h>
# include <stdlib. h>
void main (void);
void main (void)
{
int num = 100;
char str[25];
sprintf(str, " %d" , num);
printf ("The number 'num' is %d and the string 'str' is %s. /n" ,
num, str);
}
在将浮点型数字转换为字符串时,需要使用另外一组函数。以下是用
fcvt()函数将浮点型值转换为字符串的一个例子:
# include <stdio. h>
# include <stdlib. h>
void main (void);
void main (void)
{
double num = 12345.678;
char * sir;
int dec_pl, sign, ndigits = 3; /* Keep 3 digits of precision. * /
str = fcvt(num, ndigits, &dec-pl, &sign); /* Convert the float
to a string. * /
printf("Original number; %f/n" , num) ;
/* Print the original
floating-point
value. * /
printf ("Converted string; %s/n",str);
/* Print the converted
string's value. * /
printf ("Decimal place: %d/n" , dec-pi) ; /* Print the location of
the decimal point. * /
printf ("Sign: %d/n" , sign) ;
/* Print the sign.
0 = positive,
1 = negative. * /
}
fcvt()函数和
itoa()函数有数大的差别。
fcvt()函数有
4个参数:第一个参数是要转换的浮点型值;第二个参数是转换结果中十进制小数点右侧的位数;第三个参数是指向一个整数的指针,该整数用来返回转换结果中十进制小数点的位置;第四个参数也是指向一个整数的指针,该整数用来返回转换结果的符号
(0对应于正值,
1对应于负值
)。
需要注意的是,
fcvt()函数的转换结果中并不真正包含十进制小数点,为此,
fcvt()函数返回在转换结果中十进制小数点应该占据的位置。在上例中,整型变量
dec_pl的结果值为
5,因为在转换结果中十进制小数点应该位于第
5位后面。如果你要求转换结果中包含十进制小数点,你可以使用
gcvt()函数
(见下表
)。
下列函数可以将浮点型值转换为字符串:
-------------------------------------------------------------------------
函数名
作
用
-------------------------------------------------------------------------
ecvt()
将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点
fcvt()
以指定位数为转换精度,余同
ecvt()
gcvt()
将双精度浮点型值转换为字符串,转换结果中包含十进制小数点
-------------------------------------------------------------------------
请参见:
6.
8
怎样将字符串转换为数字
?
6.7
怎样将字符串转换为数字
?
C语言提供了几个标准库函数,可以将字符串转换为任意类型
(整型、长整型、浮点型等
)的数字。以下是用
atoi()函数将字符串转换为整数的一个例子:
# include <stdio. h>
# include <stdlib. h>
void main (void) ;
void main (void)
{
int num;
char * str = "100";
num = atoi(str);
printf("The string 'str' is %s and the number 'num' is %d. /n",
str, num);
}
atoi()函数只有一个参数,即要转换为数字的字符串。
atoi()函数的返回值就是转换所得的整型值。
下列函数可以将字符串转换为数字:
------------------------------------------------------------------------
函数名
作
用
------------------------------------------------------------------------
atof()
将字符串转换为双精度浮点型值
atoi()
将字符串转换为整型值
atol()
将字符串转换为长整型值
strtod()
将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字
strtol()
将字符串转换为长整值,并报告不能被转换的所有剩余数字
strtoul()
将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字
------------------------------------------------------------------------
将字符串转换为数字时可能会导致溢出,如果你使用的是
strtoul()这样的函数,你就能检查这种溢出错误。请看下例:
# include <stdio. h>
# include <stdlib. h>
# include <limits. h>
void main(void);
void main (void)
{
char* str = "1234567891011121314151617181920" ;
unsigned long num;
char * leftover;
num = strtoul(str, &leftover, 10);
printf("Original string: %s/n",str);
printf("Converted number: %1u/n" , num);
printf("Leftover characters: %s/n" , leftover);
}
在上例中,要转换的字符串太长,超出了无符号长整型值的取值范围,因此,
strtoul()函数将返回
ULONG_MAX(4294967295),并使。
char leftover指向字符串中导致溢出的那部分字符;同时,
strtoul()函数还将全局变量
errno赋值为
ERANGE,以通知函数的调用者发生了溢出错误。函数
strtod()和
strtol()处理溢出错误的方式和函数
strtoul()完全相同,你可以从编译程序文档中进一步了解这三个函数的有关细节。
请参见:
6.
7 怎样将数字转换为字符串
6
.
9
怎样打印字符串的一部分
?
6.
6 中讨论了怎样拷贝字符串的一部分,为了打印字符串的一部分,你可以利用
6.
6的例子中的部分技巧,不过你现在要使用的是
printf()函数,而不是
sprintf()函数。请看下例:
# include <stdio. h>
# include <stdlib. h>
void main (void);
void main (void)
{
char * source_str = "THIS IS THE SOURCE STRING" ;
/ * Use printfO to print the first 11 characters of source_str. * /
printf("First 11 characters: ' %11. lls'/n" , source_str);
/ * Use printf() to print only the
last 13 characters of source _str. * /
printf("Last 13 characters:'%13.13'/n",
source_str+(strlen(source_str)-13));
}
上例的打印输出如下所示:
First 11 characters: 'THIS IS THE'
Last 13 characters:
'SOURCE STRING'
在上例中,第一次调用
printf()函数时,通过指定参数
"%11.11s",迫使
printf()函数只打印
11个字符的长度,因为源字符串的长度大于
11个字符,所以在打印时源字符串将被截掉一部分,只有头
11个字符被打印出来。第二次调用
printf()函数时,它将源字符串的最后
13个字符打印出来,其实现过程为:
(1)用
strlen()函数计算出
source_str字符串的长度,即
strlen(source_str)。
(2)将
source_str的长度减去
13(13是将要打印的字符数
),得出
source_str中剩余字符数,且
pstrlen(source_str)-13。
(3)将
strlen(source_str)-13和
source_str的地址相加,得出指向
source_str中倒数第
13个字符的地址的指针;即
source_str+(strlen(source_str)-13)。这个指针就是
printf()函数的第二个参数。
(4)通过指定参数“%
13.
13s”,迫使
printf()函数只打印
13个字符的长度,其结果实际上就是打印源字符串的最后
13个字符。
请参见:
6.
1 串拷贝
(strcpy)和内存拷贝
(memcpy)有什么不同
?它们适合于在哪种情况下使用
?
6.
6 怎样拷贝字符串的一部分
?
6
.
10
怎样判断两个字符串是否相同
?
C语言提供了几个标准库函数,可以比较两个字符串是否相同。以下是用
strcmp()函数比较字符串的一个例子:
#include <stdio. h>
#include <string. h>
void main (void);
void main(void)
{
char* str_1 = "abc" ; char * str_2 = "abc" ; char* str_3 = "ABC" ;
if (strcmp(str_1, str_2) == 0)
printf("str_1 is equal to str_2. /n");
else
printf("str_1 is not equal to str_2. /n");
if (strcmp(str_1, str_3) == 0)
printf("str_1 is equal to str_3.
/n");
else
printf("str_1 is not equalto str_3.
/n");
}
上例的打印输出如下所示:
str_1 is equal to str_2.
str_1 is not equal to str_3.
strcmp()函数有两个参数,即要比较的两个字符串。
strcmp()函数对两个字符串进行大小
写敏感的
(case-sensitiVe)和字典式的
(lexicographic)比较,并返回下列值之一:
----------------------------------------------------
返
回
值
意
义
----------------------------------------------------
<0
第一个字符串小于第二个字符串
0
两个字符串相等
·
>0
第一个字符串大于第二个字符串
----------------------------------------------------
在上例中,当比较
str_1(即“
abc”
)和
str_2(即“
abc”
)时,
strcmp()函数的返回值为
0。然
而,当比较
str_1(即
"abc")和
str_3(即
"ABC")时,
strcmp()函数返回一个大于
0的值,因为按
ASCII顺序字符串“
ABC”小于“
abc”。
strcmp()函数有许多变体,它们的基本功能是相同的,都是比较两个字符串,但其它地方
稍有差别。下表列出了
C语言提供的与
strcmp()函数类似的一些函数:
-----------------------------------------------------------------
函
数
名
作
用
-----------------------------------------------------------------
strcmp()
对两个字符串进行大小写敏感的比较
strcmpi()
对两个字符串进行大小写不敏感的比较
stricmp()
同
strcmpi()
strncmp()
对两个字符串的一部分进行大小写敏感的比较
strnicmp()
对两个字符串的一部分进行大小写不敏感的比较
-----------------------------------------------------------------
在前面的例子中,如果用
strcmpi()函数代替
strcmp()函数,则程序将认为字符串“
ABC”
等于“
abc”。
#include <stdio.h>
#include <iostream.h>
void main()
{
int num=0;
for(num=0;num<=158;num++)
{
char str1[25];
if(num<10)
{
sprintf(str1, "000%d-1-100-CAM.bmp",num);
printf ("the string 'str1' is %s/n",str1);
}
else
if(num<100)
{
sprintf(str1, "00%d-1-100-CAM.bmp", num);
printf ("the string 'str1' is %s/n",str1);
}
else
if(num<159)
{
sprintf(str1, "0%d-1-100-CAM.bmp",num);
printf ("the string 'str1' is %s/n",str1);
}
}
}
6.5
怎样将字符串打印成指定长度
?
如果要按表格形式打印一组字符串,你就需要将字符串打印成指定长度。利用
printf()函数可以很方便地实现这一点,请看下例
:
# include <stdio. h>
char * data[25] = {
"REGION", "--Q1--", "--Q2--", "--Q3--", "--Q4--",
"North" , "10090. 50" , "12200. 10" , "26653.12" , "62634. 32" ,
"South", "21662.37", "95843.23", "23788.23", "48279.28",
"East", "23889.38", "23789.05", "89432.84", "29874.48",
"West", "85933.82", "74373.23", "78457.23", "28799.84" };
void main (void) ;
void main (void)
{
int x;
fox (x = 0, x<25; x+ + )
{
if ((x % 5) == 0&&(x !=0))
printf("/n");
printf (" %-10. 10s" , data[x]) ;
}
}
在上例中,字符串数组
char *data[]中包含了某年
4个地区的销售数据。显然,你会要求按表格形式打印这些数据,而不是一个挨一个地毫无格式地打印这些数据。因此,上例中用下述语句来打印这些数据:
printf("%-10.
10s",
data[x]);
参数
"%-10.
10s"指示
printf()函数按
10个字符的长度打印一个字符串。在缺省情况下,
printf()函数按右对齐格式打印字符串,但是,在第一个
10的前面加上减号
(-)后,
prinft()函数,就会使字符串左对齐。为此,
printf()函数会在字符串的尾部加入空格,以使其长度达到
10个字符。上例的打印输出非常整洁,类似于一张表格,如下所示:
REGION
--Q1--
--Q2--
--Q3--
--Q4--
North
10090.50
12200.10
26653.12
62634.32
SOuth
21662.37
95843.23
23788.23
48279.28
East
23889.38
23789.05
89432.84
29874.48
West
85933.82
74373.23
78457.23
28799.84
请参见:
6.
4怎样使字符串右对齐
?
6
.
6
.怎样拷贝字符串的一部分
?
利用标准库函数
strncpy(),可以将一字符串的一部分拷贝到另一个字符串中。
strncpy()函数有
3个参数:第一个参数是目录字符串;第二个参数是源字符串;第三个参数是一个整数,代表要从源字符串拷贝到目标字符串中的字符数。以下是一个用
strncpy()函数拷贝字符串的一部分的例子:
# include <stdio. h>
# include <string. h>
void main(void);
void main (void)
{
char * source_str = "THIS IS THE SOURCE STRING" ;
char dest_strl[40]= {0}, dest_str2[40]= {0};
/ * Use strncpy() to copy only the first 11 characters. * /
strncpy(dest_strl, source-str, 11);
printf("How about that! dest-strl is now: '%s'!!!/n", dest-strl);
/ * Now, use strncpy() to copy only the last 13 characters. * /
strncpy(dest_strl, source_str + (strlen(source_str)-l3) , 13);
printf("Whoa! dest_str2 is now: '%s'!!!/n". dest_str2);
}
在上例中,第一次调用
strncpy()函数时,它将源字符串的头
11个字符拷贝到
dest_str1中,这是一种相当直接的方法,你可能会经常用到。第二次调用
strncpy()函数时,它将源字符串的最后
13个字符拷贝到
dest_str2中,其实现过程为:
(1)用
strlen()函数计算出
source_str字符串的长度,即
strlen(source_str)。
(2)将
source_str的长度减去
13(13是将要拷贝的字符数
),得出
source_str中剩余的字符数,即
pstrlen(source_str)-13。
(3)将
strlen(source_str)-13和
source_str的地址相加,得出指向
source_str中倒数第
13个字符的地址的指针,即
source_str+(strlen(source_str)-13)。这个指针就是
strncpy()函数的第二个参数。
(4)在
strncpy()函数的第三个参数中指定要拷贝的字符是
13。
上例的打印输出如下所示:
How about that! dest_str1 is now:
'THIS IS THE'!!!
Whoa! dest_str2 is now:
'SOURCE STRING'!!!
需要注意的是,在将
source_str拷贝到
dest_strl和
dest_str2之前,
dest_strl和
dest_str2都要被初始化为
null字符
(/0)。这是因为
strncpy()函数在拷贝字符串时不会自动将
null字符添加到目录字符串后面,因此你必须确保在目标字符串的后面加上
null字符,否则会导致打印出一些杂乱无章的字符。
请参见;
6.
1
串拷贝
(strcpy)和内存拷贝
(memcpy)有什么不同
?它们适合于在哪种情况下使用
?
6.
9
怎样打印字符串的一部分
?
6.6
怎样将数字转换为字符串
?
C语言提供了几个标准库函数,可以将任意类型
(整型、长整型、浮点型等
)的数字转换为字符串。以下是用
itoa()函数将整数转换为字符串的一个例子:
# include <stdio. h>
# include <stdlib. h>
void main (void);
void main (void)
{
int num = 100;
char str[25];
itoa(num, str, 10);
printf("The number 'num' is %d and the string 'str' is %s. /n" ,
num, str);
}
itoa()函数有
3个参数:第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转移数字时所用的基数。在上例中,转换基数为
10。
下列函数可以将整数转换为字符串:
----------------------------------------------------------
函数名
作
用
----------------------------------------------------------
itoa()
将整型值转换为字符串
itoa()
将长整型值转换为字符串
ultoa()
将无符号长整型值转换为字符串
----------------------------------------------------------
请注意,上述函数与
ANSI标准是不兼容的。能将整数转换为字符串而且与
ANSI标准兼容的方法是使用
sprintf()函数,请看下例:
#include<stdio.h>
# include <stdlib. h>
void main (void);
void main (void)
{
int num = 100;
char str[25];
sprintf(str, " %d" , num);
printf ("The number 'num' is %d and the string 'str' is %s. /n" ,
num, str);
}
在将浮点型数字转换为字符串时,需要使用另外一组函数。以下是用
fcvt()函数将浮点型值转换为字符串的一个例子:
# include <stdio. h>
# include <stdlib. h>
void main (void);
void main (void)
{
double num = 12345.678;
char * sir;
int dec_pl, sign, ndigits = 3; /* Keep 3 digits of precision. * /
str = fcvt(num, ndigits, &dec-pl, &sign); /* Convert the float
to a string. * /
printf("Original number; %f/n" , num) ;
/* Print the original
floating-point
value. * /
printf ("Converted string; %s/n",str);
/* Print the converted
string's value. * /
printf ("Decimal place: %d/n" , dec-pi) ; /* Print the location of
the decimal point. * /
printf ("Sign: %d/n" , sign) ;
/* Print the sign.
0 = positive,
1 = negative. * /
}
fcvt()函数和
itoa()函数有数大的差别。
fcvt()函数有
4个参数:第一个参数是要转换的浮点型值;第二个参数是转换结果中十进制小数点右侧的位数;第三个参数是指向一个整数的指针,该整数用来返回转换结果中十进制小数点的位置;第四个参数也是指向一个整数的指针,该整数用来返回转换结果的符号
(0对应于正值,
1对应于负值
)。
需要注意的是,
fcvt()函数的转换结果中并不真正包含十进制小数点,为此,
fcvt()函数返回在转换结果中十进制小数点应该占据的位置。在上例中,整型变量
dec_pl的结果值为
5,因为在转换结果中十进制小数点应该位于第
5位后面。如果你要求转换结果中包含十进制小数点,你可以使用
gcvt()函数
(见下表
)。
下列函数可以将浮点型值转换为字符串:
-------------------------------------------------------------------------
函数名
作
用
-------------------------------------------------------------------------
ecvt()
将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点
fcvt()
以指定位数为转换精度,余同
ecvt()
gcvt()
将双精度浮点型值转换为字符串,转换结果中包含十进制小数点
-------------------------------------------------------------------------
请参见:
6.
8
怎样将字符串转换为数字
?
6.7
怎样将字符串转换为数字
?
C语言提供了几个标准库函数,可以将字符串转换为任意类型
(整型、长整型、浮点型等
)的数字。以下是用
atoi()函数将字符串转换为整数的一个例子:
# include <stdio. h>
# include <stdlib. h>
void main (void) ;
void main (void)
{
int num;
char * str = "100";
num = atoi(str);
printf("The string 'str' is %s and the number 'num' is %d. /n",
str, num);
}
atoi()函数只有一个参数,即要转换为数字的字符串。
atoi()函数的返回值就是转换所得的整型值。
下列函数可以将字符串转换为数字:
------------------------------------------------------------------------
函数名
作
用
------------------------------------------------------------------------
atof()
将字符串转换为双精度浮点型值
atoi()
将字符串转换为整型值
atol()
将字符串转换为长整型值
strtod()
将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字
strtol()
将字符串转换为长整值,并报告不能被转换的所有剩余数字
strtoul()
将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字
------------------------------------------------------------------------
将字符串转换为数字时可能会导致溢出,如果你使用的是
strtoul()这样的函数,你就能检查这种溢出错误。请看下例:
# include <stdio. h>
# include <stdlib. h>
# include <limits. h>
void main(void);
void main (void)
{
char* str = "1234567891011121314151617181920" ;
unsigned long num;
char * leftover;
num = strtoul(str, &leftover, 10);
printf("Original string: %s/n",str);
printf("Converted number: %1u/n" , num);
printf("Leftover characters: %s/n" , leftover);
}
在上例中,要转换的字符串太长,超出了无符号长整型值的取值范围,因此,
strtoul()函数将返回
ULONG_MAX(4294967295),并使。
char leftover指向字符串中导致溢出的那部分字符;同时,
strtoul()函数还将全局变量
errno赋值为
ERANGE,以通知函数的调用者发生了溢出错误。函数
strtod()和
strtol()处理溢出错误的方式和函数
strtoul()完全相同,你可以从编译程序文档中进一步了解这三个函数的有关细节。
请参见:
6.
7 怎样将数字转换为字符串
6
.
9
怎样打印字符串的一部分
?
6.
6 中讨论了怎样拷贝字符串的一部分,为了打印字符串的一部分,你可以利用
6.
6的例子中的部分技巧,不过你现在要使用的是
printf()函数,而不是
sprintf()函数。请看下例:
# include <stdio. h>
# include <stdlib. h>
void main (void);
void main (void)
{
char * source_str = "THIS IS THE SOURCE STRING" ;
/ * Use printfO to print the first 11 characters of source_str. * /
printf("First 11 characters: ' %11. lls'/n" , source_str);
/ * Use printf() to print only the
last 13 characters of source _str. * /
printf("Last 13 characters:'%13.13'/n",
source_str+(strlen(source_str)-13));
}
上例的打印输出如下所示:
First 11 characters: 'THIS IS THE'
Last 13 characters:
'SOURCE STRING'
在上例中,第一次调用
printf()函数时,通过指定参数
"%11.11s",迫使
printf()函数只打印
11个字符的长度,因为源字符串的长度大于
11个字符,所以在打印时源字符串将被截掉一部分,只有头
11个字符被打印出来。第二次调用
printf()函数时,它将源字符串的最后
13个字符打印出来,其实现过程为:
(1)用
strlen()函数计算出
source_str字符串的长度,即
strlen(source_str)。
(2)将
source_str的长度减去
13(13是将要打印的字符数
),得出
source_str中剩余字符数,且
pstrlen(source_str)-13。
(3)将
strlen(source_str)-13和
source_str的地址相加,得出指向
source_str中倒数第
13个字符的地址的指针;即
source_str+(strlen(source_str)-13)。这个指针就是
printf()函数的第二个参数。
(4)通过指定参数“%
13.
13s”,迫使
printf()函数只打印
13个字符的长度,其结果实际上就是打印源字符串的最后
13个字符。
请参见:
6.
1 串拷贝
(strcpy)和内存拷贝
(memcpy)有什么不同
?它们适合于在哪种情况下使用
?
6.
6 怎样拷贝字符串的一部分
?
6
.
10
怎样判断两个字符串是否相同
?
C语言提供了几个标准库函数,可以比较两个字符串是否相同。以下是用
strcmp()函数比较字符串的一个例子:
#include <stdio. h>
#include <string. h>
void main (void);
void main(void)
{
char* str_1 = "abc" ; char * str_2 = "abc" ; char* str_3 = "ABC" ;
if (strcmp(str_1, str_2) == 0)
printf("str_1 is equal to str_2. /n");
else
printf("str_1 is not equal to str_2. /n");
if (strcmp(str_1, str_3) == 0)
printf("str_1 is equal to str_3.
/n");
else
printf("str_1 is not equalto str_3.
/n");
}
上例的打印输出如下所示:
str_1 is equal to str_2.
str_1 is not equal to str_3.
strcmp()函数有两个参数,即要比较的两个字符串。
strcmp()函数对两个字符串进行大小
写敏感的
(case-sensitiVe)和字典式的
(lexicographic)比较,并返回下列值之一:
----------------------------------------------------
返
回
值
意
义
----------------------------------------------------
<0
第一个字符串小于第二个字符串
0
两个字符串相等
·
>0
第一个字符串大于第二个字符串
----------------------------------------------------
在上例中,当比较
str_1(即“
abc”
)和
str_2(即“
abc”
)时,
strcmp()函数的返回值为
0。然
而,当比较
str_1(即
"abc")和
str_3(即
"ABC")时,
strcmp()函数返回一个大于
0的值,因为按
ASCII顺序字符串“
ABC”小于“
abc”。
strcmp()函数有许多变体,它们的基本功能是相同的,都是比较两个字符串,但其它地方
稍有差别。下表列出了
C语言提供的与
strcmp()函数类似的一些函数:
-----------------------------------------------------------------
函
数
名
作
用
-----------------------------------------------------------------
strcmp()
对两个字符串进行大小写敏感的比较
strcmpi()
对两个字符串进行大小写不敏感的比较
stricmp()
同
strcmpi()
strncmp()
对两个字符串的一部分进行大小写敏感的比较
strnicmp()
对两个字符串的一部分进行大小写不敏感的比较
-----------------------------------------------------------------
在前面的例子中,如果用
strcmpi()函数代替
strcmp()函数,则程序将认为字符串“
ABC”
等于“
abc”。
#include <stdio.h>
#include <iostream.h>
void main()
{
int num=0;
for(num=0;num<=158;num++)
{
char str1[25];
if(num<10)
{
sprintf(str1, "000%d-1-100-CAM.bmp",num);
printf ("the string 'str1' is %s/n",str1);
}
else
if(num<100)
{
sprintf(str1, "00%d-1-100-CAM.bmp", num);
printf ("the string 'str1' is %s/n",str1);
}
else
if(num<159)
{
sprintf(str1, "0%d-1-100-CAM.bmp",num);
printf ("the string 'str1' is %s/n",str1);
}
}
}
相关文章推荐
- C 语言中操作字符串的一些函数源代码(对比版)
- C#语言操作字符串详细介绍
- 【脚本语言系列】关于Python操作数据文本字符串,你需要知道的事
- C语言 编写字符串操作函数strrchr,在字符串中查找目标字符最后一次出现的位置,返回指向这次位置的指针。
- 7.C语言之字符串操作函数
- C语言字符串操作总结大全(超详细)
- C 语言中操作字符串的一些函数源代码
- C/C++语言字符串操作总结
- 我就发现,中、低级语言的字符串操作,实在是很累
- [Java语言] java常用字符串操作函数
- 【80X86汇编语言学习】【字符串处理】字符串操作举例strcat
- OC语言笔记(二):OC字符串操作
- 专题 C 语言中对字符串的操作 函数大全 三
- C 语言字符串操作函数API文档说明
- 数据结构c字符串操作语言版本
- C/C++语言字符串操作总结大全(超详细)
- Python语言基础--2(字符串的相关操作)
- C 语言中操作字符串的一些函数源代码
- C/C++语言字符串操作总结
- 【c++基础】11.c语言字符串操作