我正在尝试接收输入,无论它是什么。对这个词做点什么,然后把这个词回复给用户。这是事情,我不能限制用户输入他们想要的东西,所以我必须处理后果。在你们开始指责我之前,不,这不是一个功课。
我必须把话语放在各自的地方。所以,如果有人写
> " he*llo !w3rld ."
我必须将元字符留在他们的位置。
让我们说改变只是为了争夺。它必须输出
> " eh*olo !w3ldr ."
一旦我找回它,我想用这个词做什么是不相关的。我遇到的唯一问题实际上就是识别这个词,对它做一些事情并将其归还。
为了让您更好地理解,这是我的下面的代码
int main(){
string str;
cout<<"Enter a string: ";
getline(cin, str);
cout<<endl;
str= str + " ";
int wordFirstLetter = 0;
int currentWordLen = 0;
int p=0;
while((unsigned)p <str.length())
{
if (isalpha(str[p])) // if letter
{
str[p] = tolower(str[p]);
currentWordLen++;
}
else if(!isalpha(str[p])) { //if no letter
cout <<change(str.substr(wordFirstLetter,currentWordLen)) + " ";
wordFirstLetter = p+1;
//currentWordLen++;
currentWordLen = 0;
}
p++;
//cout<<wordFirstLetter<<" "<<currentWordLen<<endl;
}
return 0;
}
正如你在这里看到的那样,每当字符串数组中的空格不是字母时,我就会在子字符串上运行一个名为change的函数。但这很难失败,因为如果句子以空格开头或有多个空格,那么程序就会崩溃。
我一直在四处寻找并思考这个问题。需要有两个州,我找到一封信,而不是我找到的。如果我在找到一封信之前找到了一些东西,我就可以打印出来。
当我继续查看句子时,我需要在其他空间保留那封信。当我点击不是字母的东西时,我需要更改单词并将其与我点击的内容一起打印,然后重置空间并继续前进。我无法解决这个问题的功能性方法。
没有必要使用正则表达式,我觉得这有点矫枉过正。所以请不要带着现代的正则表达式图书馆来找我,并试着把它们教给我,因为我不是写珍珠,正则表达集成在一起我对它们毫无用处。并且不需要使用有限状态机。
我觉得这是一件容易的事,但我不能碰到现场。
在另一个帖子中,有人建议使用以下代码来查找单词
std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
std::stringstream ss(s);
std::string item;
while (std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
}
std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> elems;
split(s, delim, elems);
return elems;
}
它有很多积极的评论,但我不知道如何实现它并与我想要的工作。
我会编辑,因为你们问我问题。感谢
答案 0 :(得分:0)
你可以这样做:
#include <vector>
#include <string>
#include <iostream>
std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
std::stringstream ss(s);
std::string item;
while (std::getline(ss, item, delim)) {
if ( item.lenght() > 0) { // This checks if the string is not empty, to filter consecutive white space.
elems.push_back(item);
}
}
return elems;
}
std::string doSomething(const std::string original) {
// do whatever you want with original which is a word.
return modified; // where modified is std::string
}
int main() {
std::string input;
std::vector<string> listOfWords;
std::cout << "Input your phrase :" << std::endl;
std::cin >> input;
split(input, " ", &listOfWords);
for(int i = 0; i < listOfWords.size(); i++) {
std::cout << "Input was : " << listOfWords[i]
<< "now is : " << doSomething(listOfWords[i]);
}
}