我的意思是编写程序,它只是删除用户输入的单个字母,让我们说我们有一些文字如:"猴子吃香蕉"我们应该删除这封信' a'从上面的文字。
最终输出应该如下所示: ' monkey et bnn'
我已经获得了使用单个字符串完美无缺的代码,但我必须使用getline()函数来获取更长的文本,这就是为什么我必须声明字符串数组,以便通过它在getline()函数的第二个参数中的大小,如下所示:
string text[256];
getline(text, 256);
我想使用getline()函数而不给出数组的大小,但我认为这是不可能的,因此我需要坚持使用字符串数组而不是字符串。
我遇到的问题是我不知道如何正确传递字符串数组,将其用作函数的参数。这是我的代码;
#include <iostream>
#include <string>
using namespace std;
void deleteLetter(string &text[], char c)
{
size_t positionL = text.find(c);
if(positionL == string::npos)
cout << "I'm sorry, there is no such letter in text" << endl;
else
text.erase(positionL, positionL);
cout << "After your character removed: " << text << endl;
}
int main()
{
string str1[256];
char a = 'a';
cin.getline(str1, 256);
deleteLetter(str1, a);
}
我知道它的基本内容,但我仍然无法自己解决这个问题。 Perhpahs我应该伸出援助之手。
答案 0 :(得分:2)
听起来像你不需要一串字符串。只需读取用户键入的字符数即可。 getline应该处理好这件事。
int main()
{
std::string str1; // just a string here, not an array.
std::getline (std::cin,str1);
deleteLetter(str1, 'a');
}
现在您应该更改DeleteLetter的签名以将单个字符串作为参数。
void deleteLetter(std :: string&amp; text,char c);
你将如何实现deleteLetter是另一个问题。你拥有它的方式,它只会删除第一次出现'a'。
答案 1 :(得分:1)
要从控制台输入(string
)中读取cin
,您可以使用getline()
功能:
std::string line;
std::getline(std::cin, line);
要从字符串中删除给定字母的所有匹配项,您可以使用所谓的erase-remove idiom,并结合使用string::erase()
方法和std::remove()
算法。 />
(请注意,此惯用法通常会显示应用于std::vector
,但请勿忘记std::string
也可以被视为&#34;字符容器&#34; < / em>按顺序存储,类似于vector
,因此这个习惯用法也可以应用于string
内容。)
要将std::string
传递给函数/方法,请使用通常的C ++规则,即:
const std::string &
std::string &
一个简单的可编译代码如下:
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
//
// NOTE:
// Since the content of 'text' string is changed by the
// removeLetter() function, pass using non-const reference (&).
//
void removeLetter(string& text, char letter)
{
// Use the erase-remove idiom
text.erase(remove(text.begin(), text.end(), letter),
text.end());
}
int main()
{
string line;
getline(cin, line);
cout << "Read string: " << line << endl;
removeLetter(line, 'a');
cout << "After removing: " << line << endl;
}
这是我用MSVC获得的:
C:\Temp\CppTests>cl /EHsc /W4 /nologo test.cpp test.cpp C:\Temp\CppTests>test.exe monkey eats banana Read string: monkey eats banana After removing: monkey ets bnn
如果您还希望传递字符串向量(可能在代码的其他部分),我对您的问题不太清楚......
无论如何,如果你想要vector
string
(即你想在string
容器中存储一些vector
),你可以简单地组合这些STL类像这样的模板:
std::vector<std::string> strings;
要将其传递给函数/方法,请使用通常的C ++规则,即:
const &
)传递:vector<string> &
< / LI>
&
)传递:vector<string> &
< / LI>