C++常用操作

一、字符串

1、分割字符串

String.split()

String有个方法是分割字符串  .split()。但是有写字符串是需要转义才能分割,不然就会出错。

需要转义的字符串:.  $  |   (   )  [   {   ^  ?  *  +  \\      共12个特殊字符,遇到以这些字符进行分割字符串的时候,需要在这些特殊字符前加双反斜杠 \\

例如:str.split("\\.")、str.split("\\$")、str.split("\\|")  、str.split("\\(")  、str.split("\\)")、str.split("\\[")、str.split("\\{")、str.split("\\^")  、str.split("\\?")  、str.split("\\*")、str.split("\\+")、str.split("\\\\")。

源码示例:

public String[] split(String regex) {
        return split(regex, 0);
    }  
public String[] split(String regex, int limit) {
        /* fastpath if the regex is a
         (1)one-char String and this character is not one of the
            RegEx's meta characters ".$|()[{^?*+\\", or
         (2)two-char String and the first char is the backslash and
            the second is not the ascii digit or ascii letter.
         */
        char ch = 0;
        if (((regex.value.length == 1 &&
             ".$|()[{^?*+\\".indexOf(ch = regex.charAt(0)) == -1) ||
             (regex.length() == 2 &&
              regex.charAt(0) == '\\' &&
              (((ch = regex.charAt(1))-'0')|('9'-ch)) < 0 &&
              ((ch-'a')|('z'-ch)) < 0 &&
              ((ch-'A')|('Z'-ch)) < 0)) &&
            (ch < Character.MIN_HIGH_SURROGATE ||
             ch > Character.MAX_LOW_SURROGATE))
        {
            int off = 0;
            int next = 0;
            boolean limited = limit > 0;
            ArrayList list = new ArrayList<>();
            while ((next = indexOf(ch, off)) != -1) {
                if (!limited || list.size() < limit - 1) {
                    list.add(substring(off, next));
                    off = next + 1;
                } else {    // last one
                    //assert (list.size() == limit - 1);
                    list.add(substring(off, value.length));
                    off = value.length;
                    break;
                }
            }
            // If no match was found, return this
            if (off == 0)
                return new String[]{this};
 
            // Add remaining segment
            if (!limited || list.size() < limit)
                list.add(substring(off, value.length));
 
            // Construct result
            int resultSize = list.size();
            if (limit == 0)
                while (resultSize > 0 && list.get(resultSize - 1).length() == 0)
                    resultSize--;
            String[] result = new String[resultSize];
            return list.subList(0, resultSize).toArray(result);
        }
        return Pattern.compile(regex).split(this, limit);
    }

2、strcat字符链接:
将两个char类型连接。
char d[20]="GoldenGlobal"; char *s="View"; strcat(d,s);
结果放在d中
printf("%s",d);
输出 d 为 GoldenGlobalView (中间无空格)
d和s所指内存区域不可以重叠且d必须有足够的空间来容纳s的字符串。
返回指向d的指针。
原型是 extern char *strcat(char *dest, const char *src);
把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')。


3、strcpy:

原型声明:char *strcpy(char* dest, const char *src);
头文件:#include 和 #include
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
源码示例:

#include"stdio.h"
#include"string.h"
#include"stdafx.h"
int main()
{
char p1[10] = "abcd", *p2, str[10] = "xyz";


p2 = "ABCD";
strcpy(str + 2, strcat(p1 + 2, p2 + 1));
printf(" %s", str);
system("pause");
        return 0;

}

输出结果:xycdBCD

其中str+2,这个是把数组当成指针用。str指向的是数组里的第一个元素,str+2指向数组里第三个元素,也就是字母z;p1+2、p2+1一样。

 

你可能感兴趣的:(C++)