在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;
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赋给字符串

作者为初学者,文章若有不正之处或可以修改指出请与作者联系。

 

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值