String Char Iterator

时间:2012-11-03 08:13:09

标签: c++ iterator

刚回到C ++编程。 我得到的错误:

  

发送成员的请求是非类型char [30]

     

发送的成员结束请求是非类型char [30]

char sent[] = "need to break this shiat down";
    for(vector<string>::iterator it=sent.begin(); it!=sent.end(); ++it){
        if(*it == " ")
            cout << "\n";
        else
            cout << *it << endl;
    }

我应该将char更改为字符串还是以不同方式定义向量?

5 个答案:

答案 0 :(得分:3)

在其他答案中已经指出你正在迭代错误的类型。您应该将sent定义为std::string类型并使用std::string::begin()std::string::end()进行迭代,或者,如果您有C ++ 11支持,则可以轻松选择迭代固定大小的数组。您可以使用std::begin和std :: end`:

进行迭代
char sent[] = "need to break this shiat down";
for(char* it = std::begin(sent); it != std::end(sent); ++it){
    if(*it == ' ')
        std::cout << "\n";
    else
        std::cout << *it << "\n";
}

或者您可以使用基于范围的循环:

char sent[] = "need to break this shiat down";
for (const auto& c : sent)
{
  std::cout << c << "\n";
}

答案 1 :(得分:3)

你也可以使用流媒体来抛出空白并抛出换行符。

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{
    stringstream ss("need to break this shiat down.", ios_base::in);

    string s;
    while (ss >> s)
        cout << s << endl;

    return EXIT_SUCCESS;
}

结果:

  

需要
  到
  打破
  这
  shiat
  下来。

答案 2 :(得分:2)

char sent[]不是std::string,而是字符串文字 - 但在这种情况下,您可以迭代它:

int main() {
char sent[] = "need to break this shiat down";
    for(auto it = std::begin(sent); it!=std::end(sent) - 1; ++it){
        if(*it == ' ')
            cout << "\n";
        else
            cout << *it << endl;
    }
}

请注意,我将" "更改为' ' - 并跳过了最后一个空终止字符'\0' ...

实例:http://liveworkspace.org/code/55f826dfcf1903329c0f6f4e40682a12

对于C ++ 03,您可以使用此方法:

int main() {
char sent[] = "need to break this shiat down";
    for(char* it = sent; it!=sent+sizeof(sent) - 1; ++it){
        if(*it == ' ')
            cout << "\n";
        else
            cout << *it << endl;
    }
}

如果这是当时未知的大小的字符串文字 - 请使用strlen而不是sizeof ...

答案 3 :(得分:1)

您的变量sent不是vector<string>类型,而是char[]

然而,你的for循环尝试迭代字符串向量

对于普通数组,使用C迭代:

 int len = strlen(sent);
 for (int i = 0; i < len; i++)

答案 4 :(得分:1)

使用string代替char[]

string sent = "need to break this shiat down";
for(string::iterator it=sent.begin(); it!=sent.end(); ++it){
    if(*it == ' ')
        cout << "\n";
    else
        cout << *it << endl;
}

char[]没有开始和结束方法..