C++方法操作及相关知识

C++方法操作及相关知识

C++字符串相关操作

string分割

string去空格

C++文件相关操作

C++字符串相关操作

字符串string分割

void SplitString(const string& s, vector<string>& v, const string& c)
{
    string::size_type pos1, pos2;
    pos2 = s.find(c);
    pos1 = 0;
    while (string::npos != pos2)
    {
        v.push_back(s.substr(pos1, pos2 - pos1));

        pos1 = pos2 + c.size();
        pos2 = s.find(c, pos1);
    }
    if (pos1 != s.length())
        v.push_back(s.substr(pos1));
}

string::size_type:
从逻辑上讲,size()成员函数应该似乎返回整型数值,但事实上,size操作返回是string::size_type类型的值。string类类型和其他许多库类型都定义了一些配套类型(companion type)。通过这些配套类型,库函数的使用就与机器无关(machine-independent)。size_type就是这些配套类型中的一种。它定义为与unsigned型(unsigned int获unsigned long)具有相同含义,而且保证足够大的能够存储任意的string对象的长度。string::size_type它在不同的机器上,长度是可以不同的,并非固定的长度。但只要你使用了这个类型,就使得你的程序适合这个机器。与实际机器匹配。string对象的索引也应为size_type类型。

npos:
表示size_type的最大值,用来表示不存在的位置。find()成员函数的返回值为size_type,平台编译器为32位,机器为64位。

find():
string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos。(返回值可以看成是一个int型的数)
s.find_first_of():返回子串出现在母串中的首次出现的位置
s.find_last_of():返回子串出现在母串中的最后一次出现的位置
s.find(“b”,5):从字符串s 下标5开始,查找字符串b ,返回b 在s 中的下标
s.rfind():反向查找(正反查找不一致说明不止一个子串)

substr():
定义于头文件 < string >
s.substr(pos, n) : 返回一个string,包含s中从pos开始的n个字符的拷贝。
pos - 从此位置开始拷贝
n - 拷贝 n 长度的字符串
参数pos的默认值是0,n的默认值是s.size() - pos。
①不加参数会拷贝整个s。
②只加参数pos,会从pos位置开始拷贝剩余全部字符。
若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾。

字符串string去空格

string trim(string& s)
{
    if (!s.empty())
    {
        s.erase(0, s.find_first_not_of(" "));
        s.erase(s.find_last_not_of(" ") + 1);
    }
    return s;
}

basic_string & erase(size_type pos=0, size_type n=npos);
即从给定起始位置pos处开始删除, 要删除字符的长度为n, 返回值修改后的string对象引用
iterator erase(const_iterator position)
删除迭代器位置处的单个字符, 并返回下个元素的迭代器
iterator erase(const_iterator first, const_iterator last)
删除迭代器[first, last)区间的所有字符,返回一个指向被删除的最后一个元素的下一个字符的迭代器

sprintf()

int sprintf( char *buffer, const char *format [, argument] … );
将各种类型的数据构造成字符串
把整数打印到字符串中

// 把整数123打印成一个字符串保存在s中。
sprintf(s, "%d", 123); // 产生"123"
//可以指定宽度,不足的左边补空格
sprintf(s, "%8d%8d", 123, 4567); // 产生:"    123    4567"
//左对齐
sprintf(s, "%-8d%8d", 123, 4567); // 产生:"123         4567"
//按照16进制打印
sprintf(s, "%8x", 4567); // 小写16进制,宽度占8个位置,右对齐
sprintf(s, "%-8X", 4568); // 大写16进制,宽度占8个位置,左对齐
//左边补0的等宽格式
sprintf(s, "%08X", 4567); // 产生:"000011D7"

strtol,strtoll,strtoul, strtoull

字符串转化成数字
long int strtol(const char *nptr, char **endptr, int base);
long long int strtoll(const char *nptr, char **endptr, int base);
unsigned long int strtoul(const char *nptr, char **endptr, int base);
unsigned long long int strtoull(const char *nptr, char **endptr, int base);

C++文件相关操作

FILE*fp=fopen(file.c_str(),“r”);

  • c++的string 类为我们提供了一个转换函数 c_str().
  • 该函数c_str()能够将 string 字符串转换为C风格的字符串,并返回该字符串的 const 指针(const char*).
  • 为了使用C语言中的 fopen() 函数打开文件,必须将 string 字符串转换为C风格的字符串.

“rt”      只读打开一个文本文件,只允许读数据
“wt”      只写打开或建立一个文本文件,只允许写数据
“at”      追加打开一个文本文件,并在文件末尾写数据
“rb”      只读打开一个二进制文件,只允许读数据
“wb”       只写打开或建立一个二进制文件,只允许写数据
“ab”       追加打开一个二进制文件,并在文件末尾写数据
“rt+”      读写打开一个文本文件,允许读和写
“wt+”      读写打开或建立一个文本文件,允许读写
“at+”     读写打开一个文本文件,允许读,或在文件末追加数据
“rb+”      读写打开一个二进制文件,允许读和写
“wb+”      读写打开或建立一个二进制文件,允许读和写
“ab+”      读写打开一个二进制文件,允许读,或在文件末追加数据

  • 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。
  • 用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
  • 若要向一个已存在的文件追加新的信息,只能用“a ”方式打开文件。但此时该文件必须是存在的,否则将会出错。
  • 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。

int fscanf(FILE * stream, const char * format, [argument…]);

  • 其功能为根据数据格式(format)从输入流(stream)中写入数据(argument)。
  • 【参数】stream为文件指针,format为格式化字符串,argument 为格式化控制符对应的参数。
  • 从文件指针fp指向的文件中,按format中对应的控制格式读取数据,并存储在agars对应的变量中。

数组相关操作

memset()

这个函数在socket中多用于清空数组.如:原型是memset(buffer, 0,sizeof(buffer))
Memset 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;
例:char a[100];memset(a, ‘/0’, sizeof(a));
memset可以方便的清空一个结构类型的变量或数组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值