使用指针处理字符串

时间:2016-01-11 02:39:44

标签: c++ string pointers

大家好,我的代码:

#include <iostream>
#include <string>

using namespace std;

void writeDown(string*t)
{
    for (int i = 0; *(t+i)!=NULL; i++)
    {
        cout << *(t+i) <<endl;
    }
}

int main()
{
    string t;
    getline(cin, t);
    string *wsk = &t;
    writeDown(wsk);
    return 0;
}

所以我只是插入一个字符串,程序应该cout<<来自它的每一个字符串。但是这里出现了什么:

binary '!=' : no operator found which takes a left-hand operand of type 'std::string' (or there is no acceptable conversion)

我做错了什么?

顺便说一下。我在VS 2013 for Win Desktop工作(顺便说一句。第2卷 - 它是一个很好的C ++编码环境吗? - 2015年,但它在我的笔记本电脑上放慢速度)

1 个答案:

答案 0 :(得分:2)

那么代码在很多层面都很糟糕,但为了保持简单并回答你的问题,我可能会使用迭代器。如果你正在使用C ++,请忘记那个旧的C风格。

试试这个:

void writeDown(const string & t)
{
    for (string::const_iterator it = t.begin();
        it != t.end();
        ++it)
    {
        cout << *it << endl;
    }
}

请注意writeDown不再将指针作为参数,而是对要打印的字符串的常量引用。

您必须更改主号码才能拨打writeDown

string t;
getline(cin, t);
writeDown(t);

如果你坚持使用“数组”方法,你必须像这样使用它,但是......

void writeDown(const string & t)
{
    for (int i = 0; t.c_str()[i] != NULL; i++)
    {
        cout << t.c_str()[i] << endl;
    }
}