0

刚刚回到用 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;
    }

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

4

5 回答 5

3

在其他答案中已指出您正在迭代错误的类型。您应该定义sentstd::stringtype 和 usestd::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";
}
于 2012-11-03T08:24:19.123 回答
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 下来 。


于 2012-11-03T08:29:45.643 回答
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...

于 2012-11-03T08:29:33.377 回答
1

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

但是,您的 for 循环会尝试遍历strings 的向量

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

 int len = strlen(sent);
 for (int i = 0; i < len; i++)
于 2012-11-03T08:16:01.637 回答
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[]没有开始和结束方法..

于 2012-11-03T08:22:57.580 回答