【发布时间】:2013-12-30 01:46:34
【问题描述】:
if(!next.find("+")){//////////////////////searching for +
for(int j=0;j<itemSize;j++){
if(!addItem[j].find(next)){
cout << addItem[j] << endl;//////why doesn't this work for multible words???
}
}
}
if(!next.find("@")){//////////////////////searching for @
for(int j=0;j<itemSize;j++){
if(!addItem[j].find(next)){
cout << addItem[j] << endl;//why doesn't this work for multiple words???
}
}
}
为什么我的 .find() for @ 和 + 只有在第一个单词中找到它们时才返回 true?我正在尝试搜索整个字符串,如果找到它,则 cout 整个字符串。
这是一个命令行参数程序; 如果我的 todo.txt 包含: “狗” “猫” “鸟+动物” “+动物” 没有“”。
如果我使用 .find() 搜索 +animal,则只打印最后一个元素。我正在尝试打印“鸟+动物”和“+动物”。怎么了?
完整代码::
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <stdlib.h>
using namespace std;
int main(int argc, char* argv[]){
vector<string> addItem;
int numLines =0;
ifstream inDo("todo.txt");
string input;
while(getline(inDo, input)){////////////to get number of lines
numLines++;
addItem.push_back(input);
}
remove("todo.txt");
ofstream todo("todo.txt", std::fstream::app);
for(int i=0; i<argc; i++){
string line = argv[i];
if(!line.find("add")){/////////////////////adds to the list
addItem.push_back(argv[i+1]);
cout << addItem.back() << " - added on line " << numLines+1 << endl;
}
if(!line.find("clear")){////////////////////////////clears the list
while(!addItem.empty()){
addItem.pop_back();
}
cout << "List Has Been Cleared."<< endl;
}
if(!line.find("Do")){////////////////////to remove items from list
if(i+2==argc){
int taskNum = atof(argv[i+1]);
cout << addItem[taskNum-1] << " has been completed << endl;
addItem.erase(addItem.begin()+(taskNum-1));
}
else{
cout << "Incorrect format, please retry with 'do #'" << endl;
}
}
if(!line.find("ls")){/////////////////////////prints the list
if(i+1==argc){
int count=0;
int listSize=addItem.size();
while(count < listSize){
cout << count+1 << " " << addItem[count] << endl;
count++;
}
}
if(i+2==argc){/////////////for searching for a certain word
int itemSize=addItem.size();
string next = argv[i+1];
for(int a=0;a<itemSize;a++){
if(!addItem[a].find(next)){
cout << addItem[a] << endl;
}
}
if(!next.find("+")){/////////////searching for +
for(int j=0;j<itemSize;j++){
if(!addItem[j].find(next)){
cout << addItem[j] << endl;
///doesn't work!!
}
}
}
if(!next.find("@")){//////////////////////searching for @
for(int j=0;j<itemSize;j++){
if(!addItem[j].find(next)){
cout << addItem[j] << endl;
//dosen't work!!
}
}
}
}
}
}
vector<string> temp;////////////////////reverse the vector order
while(!addItem.empty()){
temp.push_back(addItem.back());
addItem.pop_back();
}
while(!temp.empty()){////////////////////send to file
todo << temp.back() << "\n";
temp.pop_back();
}
todo.close();
return 0;
}
【问题讨论】:
-
这是一个 looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooot请提供一个简单的问题示例。
-
@user3092909 这整个东西不可能是“有问题的部分”。
-
对不起,我把我认为有问题的部分移到了顶部
标签: c++ string find command-line-arguments