我想在一个字符串中添加一个.“”字符,但是我不知道该怎么做?有可能吗?
#include <iostream>
#include <string.h>
using namespace std;
int main(int argc, char *argv[]) {
string input;
char dot='.';
cin>>input;
for(int i=0;i<input.length();i++)
{
if( input[i]>=65 && input[i]<=90)
{
input[i]=input[i]+32;
}
if( (input[i]=='a') || (input[i]=='e') || (input[i]=='i') || (input[i]=='o') || input[i]=='y' || input[i]=='u' )
{
input.erase(i,i+1);
}
input[i]+=dot;
}
cout<<input<<endl;
return 0;
}
5条答案
按热度按时间yyyllmsg1#
来自cpluplus.com参考(http://www.cplusplus.com/reference/string/string/insert/)
此外,请检查以下链接:
http://www.cplusplus.com/reference/string/string/append/
zyfwsgd62#
在编写代码之前,您应该详细说明它应该做什么。对于您的代码,我只能猜测:转换为小写字母(天真地,假设你只会遇到ASCII中的26个非重音字母),然后删除所有元音字母(同样,非常天真地,因为即使在英语中,判断某个字符是否是元音字母也不是一件小事--考虑yet和day中的y),最后在每个字符后面插入一个点,最明显的方法如下:
但我还是要说,我只是在猜测你想做什么。
另一种方法是在初始字符串上使用
std::transform
,使其全部小写,如果你经常这样做,你将得到一个ToLower
函数对象;否则,仅仅为了能够使用std::transform
一次而编写一个脚本可能会非常麻烦。1zmg4dgp3#
我假设您需要以下输入:
要提供此输出:
您不必尝试在适当的位置修改字符串,只需在执行过程中生成一个新字符串即可:
注:
<cctype>
代表toupper()
。<string.h>
已弃用;使用<string>
。getline()
读取整行;istream::operator>>()
读取字。tolower()
、toupper()
等进行字符变换。c + 32
不能描述您的意图。c >= 'A' && c <= 'Z'
将起作用;你不需要使用ASCII码。const
来处理那些不会改变的事情。ig9co6j14#
我不知道这个老问题是如何回到当前列表中的,但在查看答案后,看起来如果输入的不止一个单词,所有的都将错过标记。从您的注解中,似乎您希望删除所有元音,并在删除之前的字符之前放置一个
'.'
。因此,您的示例"tour"
变为".t.r"
。从其他的答案中吸取经验,并无耻地将
'y'
as从元音列表中删除,您可以执行类似的操作:您的示例:
一个更长的例子:
9udxz4iz5#
根据您的评论,您似乎想要这样的内容: