CString,字符数组,string 互相转换
- 格式:docx
- 大小:17.08 KB
- 文档页数:2
1. atoiint atoi ( const char * str );Convert string to integerParses the C string str interpreting its content as an integral number, which is returned as an int value./* atoi example */#include <stdio.h>#include <stdlib.h>int main (){int i;char szInput [256];printf ("Enter a number: ");fgets ( szInput, 256, stdin );i = atoi (szInput);printf ("The value entered is %d. The double is %d.\n",i,i*2); return 0;}outputEnter a number: 73The value entered is 73. The double is 146.2. atollong int atol ( const char * str );Convert string to long integerParses the C string str interpreting its content as an integral number, which is returned as a long int value./* atol example */#include <stdio.h>#include <stdlib.h>int main (){long int li;char szInput [256];printf ("Enter a long number: ");gets ( szInput );li = atol (szInput);printf ("The value entered is %d. The double is %d.\n",li,li*2);return 0;}outputEnter a number: 567283The value entered is 567283. The double is 1134566.3. atofdouble atof ( const char * str );Convert string to doubleParses the C string str interpreting its content as a floating point number and returns its value as a double./* atof example: sine calculator */#include <stdio.h>#include <stdlib.h>#include <math.h>int main (){double n,m;double pi=3.1415926535;char szInput [256];printf ( "Enter degrees: " );gets ( szInput );n = atof ( szInput );m = sin (n*pi/180);printf ( "The sine of %f degrees is %f\n" , n, m );return 0;}OutputEnter degrees: 45The sine of 45.000000 degrees is 0.7071014. itoachar * itoa ( int value, char * str, int base );Convert integer to string (non-standard function)Converts an integer value to a null-terminated string using the specified base and stores the result in the array given by str parameter.This function is not defined in ANSI-C and is not part of C++, but is supported by some compilers.A standard-compliant alternative for some cases may be sprintf:∙sprintf(str,"%d",value) converts to decimal base.∙sprintf(str,"%x",value) converts to hexadecimal base.∙sprintf(str,"%o",value) converts to octal base/* itoa example */#include <stdio.h>#include <stdlib.h>int main (){int i;char buffer [33];printf ("Enter a number: ");scanf ("%d",&i);itoa (i,buffer,10);printf ("decimal: %s\n",buffer);itoa (i,buffer,16);printf ("hexadecimal: %s\n",buffer);itoa (i,buffer,2);printf ("binary: %s\n",buffer);return 0;}OutputEnter a number: 1750decimal: 1750hexadecimal: 6d6binary: 110110101105. ftoa#include <sstream>string convertDouble(double value) {std::ostringstream o;if (!(o << value))return "";return o.str();6. string to char1. const char *c_str();c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同.这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
CString和string的转换CString和string的转换//从CString转换到stringCString str1 = "ABC";string str2 = str1.GetBuffer();//从string转换到CStringstring str1 = "ABC";CString str2 = str1.c_str();char*、TCHAR*转换CStringCString str(****)下⾯详细写⼀下其它转换///************************************************************************* 函数: TransCStringToTCHAR* 描述:将CString 转换为 TCHAR** ⽇期:************************************************************************/TCHAR* CPublic::CString2TCHAR(CString &str){int iLen = str.GetLength();TCHAR* szRs = new TCHAR[iLen];lstrcpy(szRs, str.GetBuffer(iLen));str.ReleaseBuffer();return szRs;}/************************************************************************* 函数: TCHAR2Char* 描述:将TCHAR* 转换为 char** ⽇期:************************************************************************/char* TCHAR2char(TCHAR* tchStr){int iLen = 2*wcslen(tchStr);//CString,TCHAR汉字算⼀个字符,因此不⽤普通计算长度char* chRtn = new char[iLen+1]wcstombs(chRtn,tchStr,iLen+1);//转换成功返回为⾮负值return chRtn;}/************************************************************************* 函数: char2tchar* 描述:将 char* 转换为 TCHAR** ⽇期:************************************************************************/TCHAR *char2tchar(char *str){int iLen = strlen(str);TCHAR *chRtn = new TCHAR[iLen+1];mbstowcs(chRtn, str, iLen+1); return chRtn;}/************************************************************************* 函数: CString2char* 描述:将CString转换为 char** ⽇期:************************************************************************/char* CPublic::CString2char(CString &str){int len = str.GetLength();char* chRtn = (char*)malloc((len*2+1)*sizeof(char));//CString的长度中汉字算⼀个长度memset(chRtn, 0, 2*len+1);USES_CONVERSION;strcpy((LPSTR)chRtn,OLE2A(str.LockBuffer()));return chRtn;}WideCharToMultiByte和MultiByteToWideChar函数的⽤法⽀持Unicode编码,需要多字节与宽字节之间的相互转换WideCharToMultiByte的代码页⽤来标记与新转换的字符串相关的代码页。
一、String类字符串与字符数组1、构造字符串对象常量对象:”暨南大学”、”程序设计”、”123.56”、”ABC”字符串对象:String s; s=new String(“we are students.”);声明与创建分步完成。
而String s=new String(“we are students.”); 声明与创建一步完成。
2、由字符数组来构造字符串:如:char a[]={‘J’,’a’,’v’,’a’};String s=new String(a);注意:System.out.print(a);显示是Java。
System.out.print(“”+a); 显示是什么呢?System.out.print(s); 显示也是Java。
3、String(char []b,int startIndex,int count)提取字符数组b中的一部分字符创建一个字符串对象。
4、引用字符串常量对象:如String s1,s2; s1=”123”;s2=”abc”;5、字符串比较的运算符:==和equals(String s)的功能equals(String s)的功能:比较当前字符串对象的实体是否与参数s指定的字符串的实体相同;==的功能:是字符串对象的引用比较,相同则为true。
例:Public static void main(String args[]){String S1,S2;S1=new String(“暨南大学”);S2=new String(“暨南大学”);System.out.println(S1.equals(S2)); //输出结果是trueSystem.out.println(S1==S2); //输出结果是falseString S3,S4;S3=“暨南大学”;S4=“暨南大学”;System.out.println(S3.equals(S4)); //输出结果是trueSystem.out.println(S3==S4); //输出结果是trueSystem.out.println(S3==S1); //输出结果?System.out.println(S3==S2); //输出结果?}字符串来创建字符数组:1、public void getChars(int start,int end,char[] c,int offset)2、public char[] toCharArray()二、字符串与基本数据的相互转换1、数字字符构成的字符串转换成数值型数据:在ng包中的Integer类调用其类方法public static int parseInt(String s)可以将由数字字符组成的字符串转换成int型数据。
string类的字符串替换方法概述及解释说明1. 引言1.1 概述本文旨在介绍和解释Java中String类的字符串替换方法。
String是Java中最常用的类之一,用于表示和操作字符串。
字符串替换是一个常见且重要的操作,它可以帮助我们在字符串中找到指定的字符或子串,并将其替换为新的字符或子串。
1.2 文章结构本文分为四个主要部分:引言、String类的字符串替换方法、解释说明和结论。
在引言部分,我们将简要介绍文章的背景和目标,并概括讨论将要涉及到的主题。
接下来,在String类的字符串替换方法部分,我们将详细介绍三种不同的替换方法,包括方法一、方法二和方法三。
然后,在解释说明部分,我们将解释每种方法的工作原理、使用场景以及提供示例说明。
最后,在结论部分,我们将总结所发现的内容并探讨这些方法的优缺点,并展望未来它们可能发展的方向。
1.3 目的本文旨在帮助读者全面理解和掌握Java中String类提供的字符串替换方法。
通过深入研究每个方法的原理和应用场景,读者将能够更好地运用这些方法来处理自己的字符串操作需求。
我们希望读者通过本文的阅读和学习,能够增强对String类的理解,提升编程能力,并为未来的开发工作打下坚实的基础。
2. String类的字符串替换方法2.1 方法一String类提供了replace()方法来进行字符串替换。
该方法接受两个参数,第一个参数是要被替换的子串,第二个参数是替换后的新子串。
它返回一个新的字符串,其中所有匹配的子串都被替换成新的子串。
示例代码如下:```javaString str = "Hello, world!";String newStr = str.replace("world", "universe");System.out.println(newStr);```输出结果为:```Hello, universe!```2.2 方法二除了使用replace()方法进行简单字符串替换外,String类还提供了replaceAll()方法。
C++中string,wstring,CString常⽤⽅法⼀.概念 string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳⼊C++标准之中.wstring是操作宽字符串的类.C++标准程序库对于string的设计思维就是让他的⾏为尽可能像基本类型,不会在操作上引起什么⿇烦。
CString是对string(字符串)和wstring(宽字符串)的⼀个封装,常⽤在mfc中.⽤来解决编码问题的. string/wstring和CString在使⽤中,要根据实际环境选取。
CString是MFC⾥的,string是STL⾥的,后者通⽤性强些,前者功能全些。
⼀般在mfc中使⽤CString更为好⼀些。
⼆.常⽤⽅法string/wstring常⽤⽅法:string类的构造函数:string(const char *s); //⽤const字符串s初始化string(int n,char c); //⽤n个字符c初始化此外,string类还⽀持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。
当构造的string太长⽽⽆法表达时会抛出length_error异常;string类的字符操作:const char &operator[](int n)const;const char &at(int n)const;char &operator[](int n);char &at(int n);operator[]和at()均返回当前字符串中第n个字符的位置,但at函数提供范围检查,当越界时会抛出out_of_range异常,下标运算符[]不提供检查访问。
const char *data()const;//返回⼀个⾮null终⽌的c字符数组const char *c_str()const;//返回⼀个以null终⽌的c字符串int copy(char *s, int n, int pos = 0) const;//把当前串中以pos开始的n个字符拷贝到以s为起始位置的字符数组中,返回实际拷贝的数⽬string的特性描述:int capacity()const; //返回当前容量(即string中不必增加内存即可存放的元素个数)int max_size()const; //返回string对象中可存放的最⼤字符串的长度int size()const; //返回当前字符串的⼤⼩int length()const; //返回当前字符串的长度bool empty()const; //当前字符串是否为空void resize(int len,char c);//把字符串当前⼤⼩置为len,并⽤字符c填充不⾜的部分string类的输⼊输出操作:string类重载运算符operator>>⽤于输⼊,同样重载运算符operator<<⽤于输出操作。
字符串数组转为字符串在程序开发过程中,经常需要将字符串数组转换为字符串,以便进行一系列字符的处理操作,比如字符串的拼接、输入输出等等。
字符串数组与字符串之间的转换也是较为常见的操作,本文将会介绍字符串数组转为字符串的方法。
一、使用for循环遍历字符串数组在程序中,我们可以通过使用for循环语句遍历字符串数组,然后使用StringBuffer或StringBuilder来实现字符串的拼接,从而获得转换后的字符串。
以下是示例代码:```String[] strArr = {"hello", "world", "!"};StringBuilder sb = new StringBuilder();for (int i = 0; i < strArr.length; i++) {sb.append(strArr[i]);}String str = sb.toString();```以上示例代码中,首先定义了一个字符串数组strArr,然后定义一个StringBuilder对象sb,用于存储拼接后的字符串。
通过for循环遍历字符串数组,将每个字符串拼接到sb中,最后调用toString()方法将其转换为字符串。
二、使用String类的join方法在Java 8中,String类提供了一个join方法,可以非常方便地将字符串数组转换为字符串。
以下是示例代码:```String[] strArr = {"hello", "world", "!"};String str = String.join("", strArr);```以上示例代码中,使用join方法实现了将字符串数组转换为字符串的操作。
该方法的第一个参数是分隔符,这里传入空字符串,表示不使用分隔符。
第二个参数是要转换的字符串数组。
c++中wstring和string的转换⼀、wchar_t和char的基础知识1.C程序中使⽤的char类型,是占⽤⼀个字节,⼀共可以表⽰256个字符。
⽽在32位系统中,char*是占⽤四个字节的,因为⼀个指针变量占⽤的存储空间为4个字节。
char类型的编码规则⼀般为ASCII编码。
我在此处测试了⼀下再GCC中char[]是不可以存储中⽂字符的(可能是我的编译器没有和编辑器的编码⽅式不⼀样,导致出来的结果是乱码的中⽂),但是在vs中,似乎使⽤某些优化,char是可以⽤来存储中⽂字符的。
但是他们都是显⽰出⽂字来的,ASCII编码中没有汉字,但是还是显⽰出来了,这本⾝存在⼀些我们不知道的操作(这个内容需要⾃⼰来深究)。
在尝试了修改了编码问题后,GCC编译器也可以实现中⽂的输⼊了。
(待续)此时,对于这个问题我已经找到了我的答案普通的char类型是⼀个正数,是从0-127个编码,⽽输⼊中⽂的字符的值第⼀个字节都是负数(很难受,好像还是不对),可能是通过数字的符号来判定改符号是⼀个字节还是两个字节的。
因此判定char的编码规则应该不只是Ascii⼀种。
2.wchar_t在C程序中占⽤的字节为2个字节,相当于⼀个⽆符号短整型。
其长度是可变的,根据运⾏的平台⽽定,可以是2个字节或者是4个字节。
在win32 MSVC环境下,C库中wchar_t的长度为2个字节typedefine unsigned short wchar_t;/* 16bits*/wchar_t采⽤的是unicode编码,unicode的编码是固定的,但是因为其需要2到4个字节,它的存储⽅法不尽相同。
所以会产⽣不同版本的unicode。
unicode 的⼀种实现⽅式 UTF-8。
参见链接https:///kingstarspe/p/ASCII.htmlUTF-8的编码规则很简单,只有⼆条:1)对于单字节的符号,字节的第⼀位设为0,后⾯7位为这个符号的unicode码。
多字节与宽字节stringwstring互转多字节字符集(MBCS,Multi-Byte Chactacter Set):指⽤多个字节来表⽰⼀个字符的字符编码集合。
⼀般英⽂字母⽤1Byte,汉语等⽤2Byte来表⽰。
兼容ASCII 127。
在最初的时候,Internet上只有⼀种字符集——ANSI的ASCII字符集,它使⽤7 bits来表⽰⼀个字符,总共表⽰128个字符,其中包括了英⽂字母、数字、标点符号等常⽤字符。
为了扩充,以⽤于显⽰本国的语⾔,不同的国家和地区制定了不同的标准,由此产⽣了 GB2312, BIG5, JIS 等各⾃的编码标准。
这些使⽤ 2个来代表⼀个字符的各种汉字延伸编码⽅式,称为 ANSI 编码,⼜称为"MBCS(Muilti-Bytes Charecter Set,多字节字符集)"。
不同 ANSI 编码之间互不兼容,当信息在国际间交流时,⽆法将属于两种语⾔的⽂字,存储在同⼀段 ANSI 编码的⽂本中。
⼀个很⼤的缺点是,同⼀个编码值,在不同的编码体系⾥代表着不同的字。
这样就容易造成混乱。
导致了unicode码的诞⽣。
宽字节字符集:⼀般指Unicode编码的字符集,Unicode称为统⼀码或万国码,统⼀了不同国家的字符编码。
Unicode通常⽤两个字节表⽰⼀个字符,原有的英⽂编码从单字节变成双字节,只需要把⾼字节全部填为0就可以。
为了统⼀所有⽂字的编码,Unicode应运⽽⽣。
Unicode把所有语⾔都统⼀到⼀套编码⾥,这样就不会再有乱码问题了。
Unicode固然统⼀了编码⽅式,但是它的效率不⾼,⽐如UCS-4(Unicode的标准之⼀)规定⽤4个字节存储⼀个符号,那么每个英⽂字母前都必然有三个字节是0,这对存储和传输来说都很耗资源。
为了提⾼Unicode的编码效率,于是就出现了UTF-8编码。
UTF-8可以根据不同的符号⾃动选择编码的长短。
⽐如英⽂字母可以只⽤1个字节就够了。
CString,字符数组,string 互相转换
有三个函数可以将字符串的内容转换为字符数组和C—string
1.data(),返回没有”\0“的字符串数组
2,c_str(),返回有”\0“的字符串数组
3,copy()
string 转CString
CString.format("%s", string.c_str());
用c_str()确实比data()要好.
CString转string
string s(CString.GetBuffer());
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
char* 转CString
CString.format("%s", char*);
CStringstrtest;
char * charpoint;
charpoint="give string a value";
strtest=charpoint; //直接付值
CString转char *
CStringstrtest="wwwwttttttt";
charpoint=strtest.GetBuffer(strtest.GetLength());
CString转换char[100]
char a[100];
CStringstr("aaaaaa");
strncpy(a,(LPCTSTR)str,sizeof(a));
CStringstr="aaa";
char* ch;
ch=(char*)(LPCTSTR)str;
char* 转string
string s(char *);
你的只能初始化,在不是初始化的地方最好还是用assign().
string 转char *
char *p = string.c_str();
_bstr_t与CString互转
_bstr_tbstr
CStringcstr;
CString -> _bstr_t: bstr=(_bstr_t)cstr;
_bstr_t ->CString: cstr=(LPCSTR)bstr;
BSTR 与CString互转
BSTR bstr;
CStringcstr;
CString ->BSTR :bstr=cstr.AllocSysString(); BSTR ->CString :cstr=(LPCSTR)bstr;。