错误:带有索引或迭代字符串的'<'标记之前的预期初始化程序

时间:2014-01-23 01:10:31

标签: c++ string g++

这对我来说是最奇怪的错误。

g++ -Wall -g -std=c++11 *.cpp -o lab2
lab2.cpp: In function ‘void toAlpha(std::string&)’:
lab2.cpp:18:19: error: expected initializer before ‘<’ token
  for(int i = 0, i < str.length(), ++i){
               ^
lab2.cpp:18:19: error: expected ‘;’ before ‘<’ token
lab2.cpp:18:19: error: expected primary-expression before ‘<’ token
lab2.cpp:18:38: error: expected ‘;’ before ‘)’ token
  for(int i = 0, i < str.length(), ++i){
                                  ^

从我所读到的。此错误通常来自上述行之上的某些内容。但是,它几乎是代码中的第一个功能。也许你可以帮助看看我的眼睛不能。

仅供参考,该功能的目的是将所有非字母字符转换为空格。

无论我是通过索引还是通过迭代器访问,都会发生这种情况。

以下是代码:

#include <map>
#include <iostream>
#include <set>
#include <fstream>
#include <algorithm>
#include <list>
#include <cctype>
#include <sstream>
#include "print.h"

using namespace std;

typedef map<string,list<int>> WORDMAP;

/* makes symbols turn into spaces */

void toAlpha(string& str){
  for(int i = 0, i < str.length(), ++i){
    if(!isalpha(str[i])){
       str[i] = ' ';
    }
  }
}

4 个答案:

答案 0 :(得分:2)

您需要在for循环语句中使用;

答案 1 :(得分:1)

这是由于for循环语法不正确

造成的

变化:

for(int i = 0, i < str.length(), ++i)

为:

for(int i = 0; i < str.length(); ++i)
//           ^                 ^           

答案 2 :(得分:0)

使用分号代替逗号:

void toAlpha(string& str){
  for(int i = 0; i < str.length(); ++i){
    if(!isalpha(str[i])){
       str[i] = ' ';
    }
  }
}

答案 3 :(得分:0)

for循环语法如下:

  for(int i = 0; i < str.length(); ++i){

注意分号而不是逗号。