问题描述:由于在考虑的C语言输入输出的效率较C++高,但string类在C++语言中使用具有较好的效果,所以在开发中就希望在使用C语言的输入输出string类型,但是C语言无法直接对string类进行操作,所以需要对string类数据进行处理。
解决思路:思路一:众所周知C语言中的字符串类型为(char *)而对应的C++里面实质上string类型是对(char *)的封装。那么就可以使用string.h文件中的方法(c_str(),assign(int ,char))。对字符串进行赋值操作。思路二:在C语言中还提供有字符串的输入输出函数(char *gets(char *),int puts(char *))。
思路一、
函数简介:
一、c_str()返回一个以‘\0’结尾的字符数组。
二、s.assign(int n,char ’x’);//把n个x赋给字符串。
代码如下:
//完成对一个字符串的输入与输出的基本操作
string str;
str.assign(100,'\n'); //这里初始化一个大笑为100的,内容为‘\0'的字符串数组。
scanf("%s",str.c_str());
printf("%s\n",str.c_str());
思路二、
函数简介:
char *gets(char *buffer):
功能:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。
返回值:读入成功,返回与参数buffer相同的指针;读入过程中遇到EOF(End-of-File)或发生错误,返回NULL指针。 所以在遇到返回值为NULL的情况,要用ferror或feof函数检查是发生错误还是遇到EOF。
说明:不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值,为了避免这种情况,我们可以用gets_s()来替换gets()(注:C++11已经明确说明了使用gets_s()替代gets())。gets_s()的情况就在此不再说明,若想了解更多请与作者联系,或上网查阅资料。
int puts(char *str):
功能:打印出一组字符串(str);
返回值:输出的字符串长度,如果输出失败返回值为EOF
//完成对一个字符串的输入与输出的基本操作
char str[100]; //指定内存大小为100,若输入输出超出内存长度则会报错,提示数组越界。
gets(str);
puts(str);
附:
++提供的由C++字符串得到对应的C_string的方法是使用data()、c_str()和copy(),其中,data()以字符数组的形式返回
字符串内容,但并不添加’\0’。c_str()返回一个以‘\0’结尾的字符数组,而copy()则把字符串的内容复制或写入既有
的c_string或 字符数组内。C++字符串并不以’\0’结尾。我的建议是在程序中能使用C++字符串就使用,除非万不得已
不选用c_string。
更改内容:
这在字符串的操作中占了很大一部分。首先讲赋值,第一个赋值方法当然是使用操作符=,新值可以是string(如:s=ns)、c_string(如:s="gaint")甚至单一字符(如:s=’j’)。还可以使用成员函数assign(),这个成员函数可以使你更灵活的对字符串赋值。还是举例说明吧:
s.assign(str); //不说
s.assign(str,1,3);//如果str是"beatuful_girl" 就是把"eat"赋给字符串
s.assign(str,2,string::love);//把字符串str从索引值2开始到结尾赋给str
s.assign("gaint"); //不说
s.assign("nice",5);//把’n’ ‘i’ ‘c’ ‘e’ ‘\0’赋给字符串
s.assign(5,’x’);//把五个x赋给字符串
作者为初学者,文章若有不正之处或可以修改指出请与作者联系。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)