目錄
1. C 风格字符串
1.1 不调用库函数,实现C风格字符串的常用基本函数
2.string 类类型
2.1 对字符串类的基本操作:
2.2 C 风格的字符串与 string 对象的转换
首頁 後端開發 C#.Net教程 c/c++字串函數是什麼型別和它是如何轉換的?舉例說明

c/c++字串函數是什麼型別和它是如何轉換的?舉例說明

Jul 24, 2018 pm 02:38 PM

字符串函数之间的转换,首先要先了解C++字符串的组成,C++提供了两种字符串的表示:C 风格的字符串和标准 C++引入的 string 类类型。

1. C 风格字符串

C 风格的字符串起源于 C 语言 并在 C++中继续得到支持。字符串被存储在一个字符数组中 一般通过一个 char*类型的指针来操纵它 。

标准 C 库为操纵 C 风格的字符串提供了一组函数,例如:

int strlen( const char* ); // 返回字符串的长度

int strcmp( const char*, const char* ); // 比较两个字符串是否相等

char* strcpy(char*, const char* ); // 把第二个字符串拷贝到第一个字符串中

标准 C 库作为标准的 C++的一部分被包含在其中。为使用这些函数,我们必须包含相关的 C 头文件#include

1.1 不调用库函数,实现C风格字符串的常用基本函数

#include<iostream>
#include<cstring>
#include<cassert>
using namespace std;
/*返回字符串长度*/
int MyStrlen(const char * ch)
{
	assert(ch!=NULL);
	int i=0,count=0;
	const char *t=ch;	//用一个临时指针去遍历,防止改变原来指针指向。
	while(t[i]!=&#39;\0&#39;)
	{
		count++;
		i++;
	}
	return count;
}

/*把第二个字符串拷贝到第一个字符串中,返回第一个字符串的首部指针。*/
char* MyStrcpy(char *des,const char *src)
{
	assert((des!=NULL)&&(src!=NULL));
	int i=0;
	char *add=des;	//用add记录des的首部。
	while(src[i]!=&#39;\0&#39;)
	{
		des[i]=src[i];
		i++;
	}
	des[i]=&#39;\0&#39;;
	return add;
}

/*
比较两个字符串是否相等。
相等则返回0,前一个字符串比后一个小则返回-1,否则返回1。
*/
int MyStrcmp(const char *ch1,const char *ch2)
{
	assert((ch1!=NULL)&&(ch2!=NULL));
	int i=0;
	const char *str1=ch1;	//定义两个临时指针。
	const char *str2=ch2;
	while((str1[i]!=&#39;\0&#39;)||(str2[i]!=&#39;\0&#39;))
	{
		if(str1[i]<str2[i])
		{
			return -1;
		}
		else if(str1[i]>str2[i])
		{
			return 1;
		}
		else
		{
			i++;
		}
	}
	return 0;
}
int main()
{
	char ch[]="cavely";
	char ch2[]="julia";
	cout<<MyStrlen(ch)<<endl;	//6
	cout<<MyStrcmp(ch,ch2)<<endl;	//-1
	/*
	下面这两句不能写成:
	char ch3[100];
	ch3=MyStrcpy(ch,ch2);	//数组名是一个地址【常量】。不能被赋值
	*/
	char *ch3;
	ch3=MyStrcpy(ch,ch2);
	cout<<ch3<<endl;	//julia
	return 0;
}
登入後複製

2.string 类类型

要使用 string 类型 必须先包含相关的头文件#include

string str("hello"); //①定义一个带初值的字符串

string str2; // ②定义空字符串

string str3( str ); //③用一个 string 对象来初始化另一个 string 对象

2.1 对字符串类的基本操作:

(1)str的长度由 size()操作返回(不包含终止空字符),例如str.size()的值为5。

(2)使用 empty()操作判断字符串是否为空,例如:str2.empty()。如果字符串中不含有字符,则 empty()返回布尔常量 true ,否则返回 false。

(3)还可以直接使用赋值操作符 = 拷贝字符串,例如:st2 = st3; // 把 st3 拷贝到 st2 中

(4)可以使用加操作符 + 或看起来有点怪异的复合赋值操作符 += 将两个或多个字符串连接起来。例如,给出两个字符串

string s1( "hello, " );

string s2( "world\n" );

我们可以按如下方式将两个字符串连接起来形成第三个字符串

string s3 = s1 + s2;

如果希望直接将 s2 附加在 s1 后面 那么可使用 += 操作符

s1 += s2;

(5)string 类型支持通过下标操作符访问单个字符,例如,在下面的代码段中,字符串中的所有句号被下划线代替。

string str( "fa.disney.com" );
int size = str.size();
for ( int ix = 0; ix < size; ++ix )
if ( str[ ix ] == &#39;.&#39; )
    str[ ix ] = &#39;_&#39;;
登入後複製

上面代码段的实现可用如下语句替代:

replace( str.begin(), str.end(), &#39;.&#39;, &#39;_&#39; );
登入後複製

replace()是泛型算法中的一个,begin()和 end()操作返回指向 string 开始和结束处的迭代器(iterator) 。迭代器是指针的类抽象 ,由标准库提供。replace()扫描 begin()和 end()之间的字符。每个等于句号的字符,都被替换成下划线。

 

2.2 C 风格的字符串与 string 对象的转换

string 类型能够自动将 C 风格的字符串转换成 string 对象。例如,这使我们可以将一个 C 风格的字符串赋给一个 string 对象。

string s1;

const char *pc = "a character array";

s1 = pc; //OK

但是,反向的转换不能自动执行。对隐式地将 string 对象转换成 C 风格的字符串 string类型没有提供支持。例如下面,试图用 s1 初始化 str 就会在编译时刻失败。

char *str = s1; // 编译时刻类型错误

为实现这种转换,必须显式地调用名为 c_str()的操作。名字 c_str()代表了 string 类型与 C 风格字符串两种表示法之间的关系。字面意思是,给我一个 C 风格的字符串表示——即 指向字符数组起始处的字符指针。为了防止字符数组被程序直接处理, c_str()返回了一个指向常量数组的指针 const char*

所以,正确的初始化应该是:const char *str = s1.c_str(); // OK

相关推荐:

从C/C++迁移到PHP判断字符类型的函数

从C/C++迁移到PHP——判断字符类型的函数_php基础

视频:C++ 手册教程-在线手册教程

C  教學 | C  手冊教學 

#

以上是c/c++字串函數是什麼型別和它是如何轉換的?舉例說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1673
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
c#.net的持續相關性:查看當前用法 c#.net的持續相關性:查看當前用法 Apr 16, 2025 am 12:07 AM

C#.NET依然重要,因為它提供了強大的工具和庫,支持多種應用開發。 1)C#結合.NET框架,使開發高效便捷。 2)C#的類型安全和垃圾回收機制增強了其優勢。 3).NET提供跨平台運行環境和豐富的API,提升了開發靈活性。

從網絡到桌面:C#.NET的多功能性 從網絡到桌面:C#.NET的多功能性 Apr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C#作為多功能.NET語言:應用程序和示例 C#作為多功能.NET語言:應用程序和示例 Apr 26, 2025 am 12:26 AM

C#在企業級應用、遊戲開發、移動應用和Web開發中均有廣泛應用。 1)在企業級應用中,C#常用於ASP.NETCore開發WebAPI。 2)在遊戲開發中,C#與Unity引擎結合,實現角色控制等功能。 3)C#支持多態性和異步編程,提高代碼靈活性和應用性能。

將C#.NET應用程序部署到Azure/AWS:逐步指南 將C#.NET應用程序部署到Azure/AWS:逐步指南 Apr 23, 2025 am 12:06 AM

如何將C#.NET應用部署到Azure或AWS?答案是使用AzureAppService和AWSElasticBeanstalk。 1.在Azure上,使用AzureAppService和AzurePipelines自動化部署。 2.在AWS上,使用AmazonElasticBeanstalk和AWSLambda實現部署和無服務器計算。

C#和.NET運行時:它們如何一起工作 C#和.NET運行時:它們如何一起工作 Apr 19, 2025 am 12:04 AM

C#和.NET運行時緊密合作,賦予開發者高效、強大且跨平台的開發能力。 1)C#是一種類型安全且面向對象的編程語言,旨在與.NET框架無縫集成。 2).NET運行時管理C#代碼的執行,提供垃圾回收、類型安全等服務,確保高效和跨平台運行。

C#.NET:使用.NET生態系統構建應用程序 C#.NET:使用.NET生態系統構建應用程序 Apr 27, 2025 am 12:12 AM

如何利用.NET構建應用?使用.NET構建應用可以通過以下步驟實現:1)了解.NET基礎知識,包括C#語言和跨平台開發支持;2)學習核心概念,如.NET生態系統的組件和工作原理;3)掌握基本和高級用法,從簡單控制台應用到復雜的WebAPI和數據庫操作;4)熟悉常見錯誤與調試技巧,如配置和數據庫連接問題;5)應用性能優化與最佳實踐,如異步編程和緩存。

.NET框架與C#:解碼術語 .NET框架與C#:解碼術語 Apr 21, 2025 am 12:05 AM

.NETFramework是一個軟件框架,C#是一種編程語言。 1..NETFramework提供庫和服務,支持桌面、Web和移動應用開發。 2.C#設計用於.NETFramework,支持現代編程功能。 3..NETFramework通過CLR管理代碼執行,C#代碼編譯成IL後由CLR運行。 4.使用.NETFramework可快速開發應用,C#提供如LINQ的高級功能。 5.常見錯誤包括類型轉換和異步編程死鎖,調試需用VisualStudio工具。

C#.NET開發:入門的初學者指南 C#.NET開發:入門的初學者指南 Apr 18, 2025 am 12:17 AM

要開始C#.NET開發,你需要:1.了解C#的基礎知識和.NET框架的核心概念;2.掌握變量、數據類型、控制結構、函數和類的基本概念;3.學習C#的高級特性,如LINQ和異步編程;4.熟悉常見錯誤的調試技巧和性能優化方法。通過這些步驟,你可以逐步深入C#.NET的世界,並編寫高效的應用程序。

See all articles