在C中使⽤string类输⼊与输出
问题描述:由于在考虑的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;
c++中string的用法
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赋给字符串
作者为初学者,⽂章若有不正之处或可以修改指出请与作者联系。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。