刚回到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更改为字符串还是以不同方式定义向量?
答案 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[]
没有开始和结束方法..