【发布时间】:2015-02-19 03:44:53
【问题描述】:
对于一个作业,我们必须编写一个以各种方式操作 C++ 字符串的大型程序。大部分都在工作,但是这个特殊的功能让我很困惑。我正在尝试循环遍历字符串并在第一个字母数字字符出现之前删除所有非字母数字(制表符,空白换行符)字符,然后在第一个非字母数字字符再次出现时结束字符串。例如,“bob jon”将被保存为“bob”。当每个字符串都被认为是空的时,出现了问题。大多数同行都这么说
*(point++) = *marker;
无法完成,我应该在尝试其他任何操作之前更改它...这是一种在将迭代器的值分配给另一个迭代器的值的同时递增迭代器的方法吗?是这个问题还是别的什么?
void clean_entry( const string& j, string& k )
{
string::iterator point = k.begin();
bool checker = false;
//cycle through the constant string and check for numbers and letters
for(string::const_iterator marker = j.cbegin(); marker!=j.cend(); ++marker)
{
if( isalnum(*marker) == true )
{
*(point++) = *marker; //copy to the new k string if alphanum, and increment iterator
cout << "I found a real letter!" << endl; //debugging
checker = true;
}
else if( checker == true )
break;
}
cout << "So far we have " << k << endl; //debugging
if (checker == false )
k = "(empty word)";
cout << "The new string is " << k << " apparently." << endl; //debugging
}
【问题讨论】:
-
在调试器中运行,逐行执行代码,看看到底发生了什么。