字符串字符迭代器 刚刚返回到C++编程。 我得到的错误是:

字符串字符迭代器 刚刚返回到C++编程。 我得到的错误是:,c++,iterator,C++,Iterator,发送的成员begin in请求为非类类型char[30] 发送的成员结束请求为非类类型char[30] char sent[]=“需要将此shiat分解”; for(vector::iterator it=sent.begin();it!=sent.end();++it){ 如果(*it==“”) cout您发送的变量不是vector类型,而是char[] 但是,for循环尝试在字符串的向量上迭代 对于普通数组,请使用C迭代: int len = strlen(sent); for (int

发送的成员begin in请求为非类类型char[30]

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

char sent[]=“需要将此shiat分解”;
for(vector::iterator it=sent.begin();it!=sent.end();++it){
如果(*it==“”)

cout您发送的变量
不是
vector
类型,而是
char[]

但是,for循环尝试在字符串的向量上迭代

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

 int len = strlen(sent);
 for (int i = 0; i < len; i++)
int len=strlen(已发送);
对于(int i=0;i
使用
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;
}
string sent=“需要将此shiat分解”;
for(string::iterator it=sent.begin();it!=sent.end();++it){
如果(*it=='')

cout在其他答案中指出,您迭代的类型错误。您应该将
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[]=“需要将此shiat分解”;
for(char*it=std::begin(sent);it!=std::end(sent);+it){
如果(*it=='')

std::cout
char sent[]
不是
std::string
而是string literal,但在这种情况下,您可以对其进行迭代:

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;
    }
}

如果此时不知道大小的字符串文字-请使用strlen而不是sizeof…

您也可以使用流式处理来抛出空白并插入换行符

#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;
}
#包括
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
stringstream ss(“需要将此shiat分解。”,ios_base::in);
字符串s;
while(ss>>s)

cout错误的var声明,应为char[]sent=“需要分解此shiat down”@imulsion声明正确。看起来是在“”上拆分(空格)的最简单解决方案。
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;
    }
}
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;
    }
}
#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;
}