我是靠谱客的博主 苹果戒指,最近开发中收集的这篇文章主要介绍C++中的字符串类C++中的字符串类,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

C++中的字符串类

一、历史遗留问题

  • C语言不支持真正意义上的字符串
  • C语言用字符数组一维函数实现字符串操作
  • C语言不支持自定义类型,因此无法获得字符串类型

二、解决方案

  • 从C到C++的进化过程引入了自定义类型
  • 在C++中可以通过类完成字符串类型的定义

问题

C++中的原生类型系统是否包含字符串类型?


三、标准库中的字符串类

  • C++语言直接支持C语言的所有概念
  • C++语言中没有原生的字符串类型
  • C++标准库提供了string类型
    • string直接支持字符串连接
    • string直接支持字符串的大小比较
    • string直接支持子串查找和提取
    • string直接支持字符串和插入和替换

四、编程实验

//字符串类的使用
//33-1.cpp
#include <iostream>
#include <string>

using namespace std;

void string_sort(string a[], int len)
{
	for(int i = 0; i < len; i++)
	{
		for(int j = i; j < len; j++)
		{
			if(a[i] > a[j])
			{
				swap(a[i], a[j]);
			}
		}
	}
}

string string_add(string a[], int len)
{
	string ret = "";
	for(int i = 0; i < len; i++)
	{
		ret += a[i] + "; ";
	}
	
	return ret;
}

int main()
{
	string sa[7]=
	{
		"Hello World",
		"D.T.Software",
		"C#",
		"Jave",
		"C++",
		"Python",
		"TypeScript"
	};

	string_sort(sa, 7);

	for(int i = 0; i < 7; i++)
	{
		cout << sa[i] << endl;
	}
	cout << endl;

	cout << string_add(sa, 7) << endl;
	return 0;
}

//编译运行
$ a.out 
C#
C++
D.T.Software
Hello World
Jave
Python
TypeScript

C#; C++; D.T.Software; Hello World; Jave; Python; TypeScript; 


五、标准库中的字符串类

  • 字符串数字的转换

    • 标准库中提供了相关的类对字符串和数字进行转换
    • 字符串流类(sstream)用于string的转换
      • <sstream>——相关头文件
      • istringstream——字符串输入流
      • ostringstream——字符串输出流
  • 使用方法

    • string->数字

      istringstream iss("123.45");
      double num;
      iss >> num;
      
    • 数字->string

      ostringstream oss;
      oss << 543.21;
      string s = oss.str();
      

    六、编程实验

    //字符串和数字的转换——暂用宏实现
    33-2.cpp
    #include <iostream>
    #include <string>
    #include <sstream>
    
    using namespace std;
    
    #define TO_NUMBER(s, n) (istringstream(s) >> n)
    #define TO_STRING(n) (((ostringstream&)(ostringstream() << n)).str())
    /*
    bool to_number(const string& s, int& n)
    {
    	istringstream iss(s);
    
    	return iss >> n;
    }
    
    bool to_number(const string& s, doubel& n)
    {
    	istringstream iss(s);
    
    	return iss >> n;
    }
    
    
    string to_string(int n)
    {
    	return ((ostringstream&)(ostringstream() << n)).str();
    }
    
    */
    
    
    int main()
    {
    /*
    	int n = 0;
    	cout << to_number("234", n) << endl;
    	cout << n << endl;
    */
    	int n = 0;
    	double m = 0;
    	if(TO_NUMBER("123", n))
    	{
    		cout << n << endl;
    	}
    	if(TO_NUMBER("123.456", m))
    	{
    		cout << m << endl;
    	}
    
    	string l = TO_STRING(1234.995);
    
    	cout << l << endl;
    
    
    
    	istringstream iss("1234.56");
    	//istringstream iss("aaaaa");
    
    	double num;
    
    	if(iss >> num)
    	{		
    		cout << num <<endl;
    	}
    
    	ostringstream oss;
    //	oss << 543.21;
    	oss << 543 << "." << 21;
    	string s = oss.str();
    
    	cout << s << endl;
    
    
    	return 0;
    }
    
    //编译运行
    $ a.out 
    123
    123.456
    1234.99
    1234.56
    543.21
    
    
    

六、面试题分析

  • 字符串循环右移
    • 示例:
      • abcdefg循环右移3位后得到efgabc
//33-3.cpp

#include<iostream>
#include<string>

using namespace std;

//string right_func(const string& s, unsigned int n)
string operator >> (const string& s, unsigned int n)
{
    string ret = "";
    unsigned int pos = 0;

		n = n % s.length();
		pos = s.length() - n;

		ret = s.substr(pos);
		ret += s.substr(0, pos);
    
		return ret;
}


int main()
{
    //string r = right_func("abcdefg", 8);

		string s = "abcdefg";
    string r = (s >> 3);

		cout << r <<endl;
		
    return 0;
}

七、小结

  • 应用开发中大多数情况都在进行字符串处理
  • C++中没有直接支持原生态的字符串类型
  • 标准库中通过string类支持字符串的概念
  • string类支持字符串数字的互相转换
  • string类的应用使得问题的求解变得简单

八、课后练习

  • 字符串反转
    • 要求
      • 使用string类完成
    • 示例
      • “we;tonight;you”->“ew;thginot;uoy”
    • 提示
      • string类中提供了成员函数可以查找目标字符的位置

最后

以上就是苹果戒指为你收集整理的C++中的字符串类C++中的字符串类的全部内容,希望文章能够帮你解决C++中的字符串类C++中的字符串类所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部