首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

string[x]作为左值有关问题

2012-02-07 
string[x]作为左值问题#includeiostream#includestringusingnamespacestdvoidmain(){strings1,s2cou

string[x]作为左值问题
#include   <iostream>
#include   <string>
using   namespace   std;
void   main()
{
string   s1,s2;
cout < < "请输入包含标点符号的字符串: " < <endl;
getline(cin,s1);
cout < < "s1= " < <s1 < <endl;
for(string::size_type   index1=0,index2=0;index1 <s1.size();index1++,index2++)
if(ispunct(s1[index1]))
index1++;
else
s2[index2]=s1[index1];
cout < < "s2= " < <s2 < <endl;
}

程序报错:内存不可written。但是s2[index2]=s1[index1];如果改为s2+=s1[index1]就能正常了。是不是左值问题。
查看了书籍如下:
变量是左值(2.3.1   节),且赋值操作的左操作的必须是左值。和变量一样,string   对象的下标操作返回值也是左值。因此,下标操作可以放于赋值操作符的左边或右边。通过下面循环把   str   对象的每一个字符置为   ‘*’:

          for   (string::size_type   ix   =   0;   ix   !=   str.size();   ++ix)
                  str[ix]   =   '* ';




[解决办法]
s2[index2]是获取字符串s2中位置为index2的那个char的引用。而实际上s2的长度一直为0,这个char不存在,所以就出错了。

热点排行