C++ 字符串 string

1、使用前应先包含头文件string.h,有的是cstring

#include<string>

这样才能正确的cin和cout字符串。

cin时,是按照空格、TAB和换行进行分割的

例如,输入Hello World

C++ 字符串 string

 

 

 使用cin输入,监视输入的对象,可以看到,是分Hello 和World两次cin的,因此可以用while(cin>>str)来达到对一句话中每个单词(小字符串)的访问。

 

    while (cin >> s) {
        if (s[s.size() - 1] == '.')
            cout << s.size() - 1 << endl;
        else
            cout << s.size() << " ";

    }

上述代码是用来统计每个单词中的字母个数。

C++ 字符串 string

 

2、字符串分割,转整数

字符串分割函数:strtok()

返回值必须是 char []或者char*,如果是string类型想用该函数分割,必须先将string转化为char*

void test10()
{
    char str[] = "I,am,a,student; hello world!";

    const char *split = ",; !";
    char *p2 = strtok(str,split); //str中的split字符均被替换为,同时提取出第一个子串
    while(p2)  //通过while循环可以分别将余下的字符串提取出来
    {
        cout<<p2<<endl;
        p2 = strtok(NULL,split);//将第一个参数置为NULL可以提取出剩下的
    }
}

 

3、string转char*

https://blog.csdn.net/cpongo3/article/details/93854004

char * 可以转string,直接赋值即可。不能单独赋int和c字符类型值。
string s1("demo1");
string s1 = "demo";
char *p = "demo";
s1 = p;

string转char*有三种方式:c_str(),data(),copy()
c_str()返回一个c风格的字符数组,带有''结束
data()返回一个数组,不自动增加‘’
copy()拷贝一块字符到新的内存,需要新分配一块内存用于存放。
前两个函数,原有内容发生变化,地址指的内容也会变化,使用copy不会发生这种问题。(见例子3)

const char *p = s.data();
const char * p = s.c_str();

如果不加const,要这样写

char *p = char *(s.data());
char * p = char*(s.c_str());

 

char *p = new char[s.length() + 1];
s.copy(p, string::npos);
p[s.length()] = 0;//字符串以'/0'结尾
delete p;

例子3:
std::string s1 = "demo 123456n ";
const char *p1 = s1.c_str();
const char *p2 = s1.data();
s1 = "345";

s1 内容发生变化后,p1和p2指针内容的地址也发生变化。

 

4、char *A与char A[]

char *A="ABC";如果没有用new建立动态数组时,使用char *A=这种形式给A赋值后,不允许对A进行修改

char A[]="ABC"; 用字符数组则可以允许修改

 

 5、cin一个字符串后,会自动在最后加一个''。这体现在统计字符串长度时,用strlen(ch)统计字符串长度就是以''为分界同时不包含''的长度。

 

6、数字字符转整数

//假设ch为数字字符'0'到'9',将其变为对应的整数
cout<<int(ch-'0')

 

7、在没有明确说明不能用字符串库时,用string代替char*,char[]效果更好。

string s等价于 char *s=new char[n];

之后也不用特意delete

 

8、string 也可以用下标提取字符串中的特定字符,如string[1]

通过string s;

s.length()得到字符串长度;

参考:https://blog.csdn.net/qq_37941471/article/details/82107077

https://www.cnblogs.com/springsnow/p/9428657.html#_label0_12

原文链接: https://www.cnblogs.com/ShineLeBlog/p/12161721.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++ 字符串 string

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/324103

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午12:54
下一篇 2023年3月1日 下午1:03

相关推荐