c++中string的一个问题
我是刚学习c++的菜鸟,编了一个函数StudyString()实现的功能:从string对象中去掉标点符号。要求输入到程序的字符串必须含有标点符号,输出结果则是去掉标点符号后的string对象。
运行程序,最终输出的字符串是正确的,比如:输入you...y,则能够输出youy。但此时执行string的成员函数s.length(),得到的结果确是7,而不是4。请大虾指点迷津,谢谢。
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
void StudyString();
void main()
{
StudyString();
}
void StudyString()
{
string s( "You are a golden pig! Yeah!~~~ ");
int m = 0;
string::size_type p = 0;
while(m == 0)
{
getline(cin, s);
p = s.size();
for (string::size_type i = 0; s[i] != '\0 '; ++i)
{
if(ispunct(s[i]))
{
m = 1;
p--;
string::size_type n = i;
while(s[n] != '\0 ')
{
s[n] = s[n + 1];
n++;
}
i--;//调整之后字符串s[i]是否仍是标点符号
}
}
}
s[p] = '\0 ';
m = 0;
cout < < s < < s.length() < < endl < < p < <endl;
}
[解决办法]
因为你没有缩减string的大小呀。
bool myispunct(char c){return ispunct(c);}
把你的for循环改成
s.erase(remove(s.begin(), s.end(), myispunct), s.end());