我让程序遍历该行以找到“。如果确实如此,启动另一个for循环,从字符串的结尾开始查找另一个”。如果是,它将检查它是否与第一个迭代器位于同一位置。如果是,它将插入“end-text-coloration”行,但如果不是,则会插入“begin-text-coloration”行。我不确定我的问题是否在于我的逻辑或代码:/
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int getLength(string a) {
return a.length();
}
int main ()
{
string formStart = "\033[1;32m";
string formEnd = "\033[0m";
string line;
size_t pos;
ifstream myFile ("opentest.cpp");
if (myFile.is_open()) {
while(getline(myFile,line)) {
len = getLength(line);
for (int i = 0; i < len; i++) {
if (line[i] == '"')
len = getLength(line);
for (int n = len; n >= i; n--) {
if (line[n] == '"' && n == i) {
cout << "hit end" << endl;
line.insert(i, formEnd);
} else {
cout << "hit start" << endl;
line.insert(i, formStart);
}
}
}
}
cout << line << endl;
myFile.close();
} else {
cout << "Error" << endl;
}
return 0;
}
答案 0 :(得分:0)
根据您的说明,if
应该是这样的:
if (line[n] == '"')
{
if (n == i) {
cout << "hit end" << endl;
line.insert(i, formEnd);
} else {
cout << "hit start" << endl;
line.insert(i, formStart);
}
}
答案 1 :(得分:0)
谢谢你所有的帮助。我想到了。我的循环没有赶上第二个&#34;因为它是在第一个之前插入格式字符串。这是我的解决方案,包括行终止检查:
while(getline(myFile,line))
{
int placehold;
bool issecond = false;
len = getLength(line);
for (int i = 0; i < len; i++) {
if (line[i] == '"') {
switch(issecond){
case false:
line.insert(i, formStart);
issecond = true;
i += 8;
placehold = i;
break;
case true:
line.insert((i+1), formEnd);
issecond = false;
i+=3;
break;
}
len = getLength(line);
}
if (i == (len-1) && issecond == true){
line.insert(placehold, formEnd);
issecond = false;
}
}
cout << line << endl;
}