处理字符串的函数 (1)

/*本篇博客内出现的所有知识点请参考《c++参考大全》*/
#if 0
//#include<iostream>
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<iostream>

//iscntrl是否为控制字符,0~31 和 0X7F都属于控制字符。
//Q1:控制字符是做什么用的?控制字符的使用举例?

//isalnum 字符或者数字
//isalpha,isupper,islower
//isdigit
//isxdigit , 是否为十六进制字符,包括0~9,A~F,a~f
//isgraph,是否为可打印字符,不含空格,一般都在0X21~0X7E之间
//isprint,是否为可打印字符,包括空格 ,一般都在0X20~0X7E之间
//ispunct,是否为标点字符,不含字母,数字,空格 punctuation (标点)

/********************************************************************
int main()
{
unsigned char arr[128] = {0};
for(unsigned char i=0; i<128; i++)
arr[i] = i;

int a = 0; //num&char62
int b = 0; //char52
int c = 0;//A26
int d = 0;//a26
int e = 0;//num10
int f = 0;//0X num10+12
int g = 0;//graph94
int h = 0;//print 95 32~126
int j = 0;//punct 32
int k = 0;//contrl33 0~31 、127
int l = 0;//space 6

for(int i =0; i<128; i++)
{
if(isalnum(arr[i])) a++;
if(isalpha(arr[i])) b++;
if(isupper(arr[i])) c++;
else if(islower(arr[i])) d++;
if(isdigit(arr[i])) e++;
if(isxdigit(arr[i])) f++;
if(isgraph(arr[i])) g++;
if(isprint(arr[i])) h++;
if(ispunct(arr[i])) j++;
if(iscntrl(arr[i])) k++;
if(isspace(arr[i])) l++;
}
return 0;
}
*************************************************************************/
//isspace ,是否为空格‘ ‘,横向制表符‘\t‘,纵向制表符‘\v‘,回车‘\r‘,换页‘\f‘,换行符‘\n‘
//Q2:上述这些字符都是哪些?

//void *memchr(const void*buffer,char ch,size_t count)查找前count个字符中,第一次ch出现的位置,返回指针
//Q3: size_t代表什么类型?
/************************************************************************
int main()
{
char buf[] = "abcdrfghijklmnhitjoaarn";
int n = strlen(buf);
char ch = ‘k‘;
char * p = (char*)memchr(buf,ch,12);
int buf2[13] = {1,2,3,4,5,6,7,8,123,456,678,976,23};
int *q = (int*)memchr(buf2,678,sizeof(int)*11);
// memset(buf,123126,n);
memset(buf,126,n);
buf[n] = ‘\0‘;
printf("%s\n",buf);

// memset(buf2,255,sizeof(int)*13);
// memset(buf2,256,sizeof(int)*13);
memset(buf2,128,sizeof(int)*13);
for(int i=0; i<13; i++)
{
printf("%d ",buf2[i]);
}
printf("\n");

return 0;
}
*****************************************************************/
//int memcmp(const void*buf1,const void *buf1,size_t count)比较count个字符,返回负数,0 ,正数
//void * memset(void *buf,int ch,size_t count),将buf前 count个字符置为ch的低位字节

//void * memcpy(void *to,const void *from,size_t count),拷贝
//如果数组发生重叠,拷贝的结果将不确定
//Q4:拷贝正确和拷贝错误在什么情况下发生?发生的原因是什么?如何避免这样的后果?

//void * memmove(void *to,const void *from,size_t count)
//如果发生重叠,结果仍然正确,但是from的值会改变
//Q5:为什么from的值改变?如果使用(打印)from的值,仍然是改变后的值吗?

// void* strcat(void *to,const void *from) 将from指向的字符赋值给to 指向的包括\0‘以后的字符
//但是数组发生重叠,执行结果不确定。strcat不进行边界检查。

//char* strchr(const char* str,char ch) 查找字符串,返回ch第一次出现的位置指针
//char* strrchr(const char*str,char ch)查找字符串,返回ch最后一次出现的位置指针
//int strcmp(const char* str1,const char *str2)

//int strcoll(consr char*str1,const char*str2) 比较str1和str2,比较规则由setlocale指定
/**char *setlocale(int type,const char * locale)
setlocale 试图利用locale指向的字符串,将字符串改成type指定的类型
type指定的类型有:
LC_ALL, 涉及定义类别
LC_COLLATE,影响strcoll的操作
LC_CTYPE,改变字符函数的工作方式
LC_MONETARY,确定货币格式
LC_NUMERIC,改变格式化输入输出数字的小数点
LC_TIME,确定strftime函数的行为**/
//char *strcpy(char *str1,const char *str2)如果数组重叠,拷贝结果不确定
//size_t strlen(const char *str)

//size_t strcspn(const char*str1,const char*str2)索引返回str1中第一次出现的 str2字符 的下标
//size_t strspn(consr char*str1,consr char *str2)索引返回str1中第一次出现的 非str2字符 的下标
//char* strerror(int errnum) 根据错误号,获取指向错误信息的字符串
int main()
{
size_t n = strcspn("hello world", "world");//n = 2
n = strcspn("asdf","ghjk");//n=4
n = strcspn(" "," kl");//n=0
const char *tmp = strpbrk("asdf","ghjk");
/* for(int i=0; i<43; i++)
{
printf("%s\n",strerror(i));
}*/
char str1[20] = "helloworldcome";
char *p = strncat(str1,"com",3);
printf("%s\n",str1);
char str2[20];
char *p1 = strncpy(str2,"hello",5);
const char *s2 = strstr("world hello nihao hello","ni");
// const char *s2 = strstr("world hello nihao hello","nihello");
printf("%s\n",p1);
char *s = strtok("hrll","fr");
return 0;
}
#endif
//char *strncat(char *str1,const char *str2,size_t count)连接str2的前count个字符到str1,并在末尾添上‘\0’
//不进行边界的检查,如果发生重叠后果未知。
//int strncmp(const char*str1,const char *str2,size_t count)
//char *strncpy(char *str1,const char*str2,size_t count)拷贝count个字符,如果不足count,将用‘\0‘填充。
//不进行边界检查,末尾不自动添‘\0‘,发生重叠后果未知

//char *strpbrk(const char*str1,const char *str2)匹配,返回str2任意字符在str1首次出现的地址
//char *strstr(const char*str1,const char*str2)返回str1 中第一次出现 str2子串的地址,字符串匹配

//int toupper(char ch)
//int tolower(char ch)

/*********************************************************************************
char* strtok(char *str1,const char *str2)
返回指向str1字符串中下一个标记(token)的指针

char string[] = "A string\tof ,,tokens\nand some more tokens";
char seps[] = " ,\t\n";
char *token;

int main( void )
{
printf( "Tokens:\n" );

// Establish string and get the first token:
token = strtok( string, seps ); // C4996
// Note: strtok is deprecated; consider using strtok_s instead
while( token != NULL )
{
// While there are tokens in "string"
printf( " %s\n", token );

// Get next token:
token = strtok( NULL, seps ); // C4996
}
}
打印结果:
A
strings
of
tokens
and
some
more
tokens
**********************************************************************************/

//size_t strxfrm(char *str1,const char *str2,size_t count)
//为通过strcmp比较字符串,将str2字符串转换格式,保存到str1中。结果使用str1 的strcmp
//和使用str2 的 strcoll结果相同。
//如果 区域选项 是 "POSIX" 或者 "C", 那么 strxfrm() 同用 strncpy() 来 拷贝 字符串 是等价的.
#include <cstring>
#include <iostream>
#include <windows.h>
int main(int argc, char* argv[])
{
char* source = "23234abc";
char des[100];
size_t len = strxfrm(des, source, 50);
std::cout << "len:" << len <<std::endl;
std::cout << "des:" << des <<std::endl;
return 0;
}

//Q6:如何使用strcoll 和 strxfrm ??

时间: 2024-11-08 20:26:38

处理字符串的函数 (1)的相关文章

面试题之java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况

题目:10. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”. 一.需要分析 1.输入为一个字符串和字节数,输出为按字节截取的字符串-------------->按照字节[byte]截取操作字符串,先将String转换成byte类型 .2.汉字不可以截半----------------------------------

PHP内置的字符串处理函数

字符串的特点    1.其他类型的数据用在字符串类型处理函数中,会自动将其转化成字符串后,在处理 <?php echo substr("abcdefghijklmn",2,4),"<br>"; //cdef //使用数字会自动转化为字符串 echo substr(123456,2,4); //3456 ?> 2.可以将字符串视为数组,当做字符集合来看待 <?php $str="abcdefg"; //下面这两种方法都

字符串处理函数总结

字符串函数(String processing function)也称为字符串处理函数,指的是编程语言中用来进行字符串处理的函数. C语言中常用的字符串函数: strcpy 原型:extern char *strcpy(char *dest,char *src); 用法:#include <string.h> 功能:把src所指由NUL结束的字符串复制到dest所指的数组中. 返回指向dest结尾处字符(NUL)的指针. 举例: // strcpy.c #include <syslib.

编写实现字符串拷贝函数strcpy()完整版

有个题目编程实现字符串拷贝函数strcpy(),很多人往往很快就写出下面这个代码. void strcpy( char *strDest,char *strSrc ) { while(( *strDest++ = * strSrc++) != '\0' );//逐个赋值字符串数组中的数据,知道字符串结束 } 其实仔细看看这个实现过程并不完美,严格来说非常不严谨,我们可以完善一下. char * strcpy( char *strDest, const char *strSrc )//将源字符串加

几个常见字符串处理函数的实现原理

字符串是一种常见的数据结构,对字符串的处理又可以十分灵活,所以在实际开发,尤其是非数值处理中,字符串的应用非常广泛.虽然很多字符串操作都封装在了函数库里,应用程序可以直接通过调用库函数来实现字符串处理,然而对于开发者而言,若能了解其底层实现原理,对于应用编程而言还是大有裨益的. 这篇文章主要介绍几种常用的字符串处理函数的实现原理. 一.strlen函数 strlen函数:计算字符串的实际长度,不包括'\0'. 算法:从第一个字符开始扫描,直到遇见第一个'\0',停止扫描,返回字符串长度. 代码如

php 字符串分割函数split

说明 array split    ( string $pattern   , string $string   [, int $limit  ] ) 本函数返回一个字符串数组,每个单元为   string 经区分大小写的正则表达式   pattern 作为边界分割出的子串.如果设定了   limit,则返回的数组最多包含   limit 个单元,而其中最后一个单元包含了   string 中剩余的所有部分.如果出错,则   split() 返回 FALSE. Example #1 split(

c#中的字符串查找函数

indexOf()方法,查找某字符串在一个字符串内的位置,没有则返回-1string aa="abcdef";int a=aa.indexOf("bc");//a会等于1int b=aa.indexOf("a");//b会等于0int c=aa.indexOf("g");c会等于-1所以你只要判断返回出来的int值是不是小于0就知道这个字符串里有没有包含指定的另一个字符串 c#中的字符串查找函数,布布扣,bubuko.com

C字符串处理函数

void *memccpy (void *dest, const void *src, int c, size_t n); 从src所指向的对象复制n个字符到dest所指向的对象中.如果复制过程中遇到了字符c则停止复制,返回指针指向dest中字符c的下一个位置:否则返回NULL. void *memcpy (void *dest, const void *src, size_t n); 从src所指向的对象复制n个字符到dest所指向的对象中.返回指针为dest的值. void *memchr

php常用字符串处理函数

PHP 字符串函数是 PHP 核心的组成部分.无需安装即可使用这些函数. 常用的字符串处理函数: str_replace():替换字符串中的一些字符(对大小写敏感). str_repeat():把字符串重复指定的次数. strlen():返回字符串的长度. stripos():返回字符串在另一字符串中第一次出现的位置(对大小写不敏感). str_split():把字符串分割到数组中. trim():移除字符串两侧的空白字符和其他字符. ltrim():移除字符串左侧的空白字符或其他字符. rtr

php字符串处理函数大全

php字符串处理函数大全 addcslashes - 为字符串里面的部分字符添加反斜线转义字符addslashes - 用指定的方式对字符串里面的字符进行转义bin2hex - 将二进制数据转换成十六进制表示chop - rtrim() 的别名函数chr - 返回一个字符的ASCII码chunk_split - 按一定的字符长度将字符串分割成小块convert_cyr_string - 将斯拉夫语字符转换为别的字符convert_uudecode - 解密一个字符串convert_uuencod