c++已经是字符串string了,怎么具体提取其中的某个字母
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++已经是字符串string了,怎么具体提取其中的某个字母相关的知识,希望对你有一定的参考价值。
可以直接提取出所有的字母,之后根据实际需要获取到相应的字母即可。代码如下:
#include <iostream>
#include <string>
using namespace std;
void main()
int i;
string str;
getline(cin,str);
int cnt[2][26]=0;
for(i=0;str[i]!='\0';i++)
if(str[i]>='A' && str[i]<='Z')
cnt[0][str[i]-'A']++;
else if(str[i]>='a' && str[i]<='z')
cnt[1][str[i]-'a']++;
for(i=0;i<26;i++)
if(cnt[0][i])
cout<<char('A'+i)<<':'<<cnt[0][i]<<endl;
for(i=0;i<26;i++)
if(cnt[1][i])
cout<<char('a'+i)<<':'<<cnt[1][i]<<endl;
参考技术A std::string str = "hello";
char h = str[0];
假设字符串被赋给变量str,
则声明并定义一个char型指针:
char* pstr = &str;
现在pstr加上偏移量就可以访问这个字符串了。
为了安全考虑不妨用strlen函数测试一下str的长度 参考技术B 假设字符串被赋给变量str,
则声明并定义一个char型指针:
char* pstr = &str;
现在pstr加上偏移量就可以访问这个字符串了。
为了安全考虑不妨用strlen函数测试一下str的长度 参考技术C 用string的[]提取单个字符,用substr提取子字符串。 参考技术D std::string str = "hello";
char h = str[0];本回答被提问者采纳
C++ 从可变长度参数列表中提取 std::string
【中文标题】C++ 从可变长度参数列表中提取 std::string【英文标题】:C++ Extract std::string from a variable-length argument list 【发布时间】:2011-04-17 01:40:47 【问题描述】:大家好!我正在尝试制作一个简单的 sprintf 副本,它返回格式化的字符串,但我遇到了一个小障碍......
显然,使用可变长度参数列表不能传递 std::string 实例。
我已经让解析器在 int、double、float、char、const char*、char* 上正常工作...我还没有让字符串工作。 :\
如果您想知道,这是我得到的编译错误:/root/learncpp/StringFormat/main.cpp:8: warning: cannot pass objects of non-POD type 'struct std::string' through '...'; call will abort at runtime
我这样做的主要原因是我可以方便地进行格式化,而不必依赖 3rd 方库,但仍然不必将“.c_str()”附加到 every 字符串我使用的实例。
我们将不胜感激。也许有专门为 C++ 制作的不同版本的可变长度参数列表?
编辑:我刚刚意识到,如果您将指针传递给字符串(即使用 & 前缀),它会很好地工作。您所要做的就是取消引用自定义 sprintf 中的字符串指针,同时传递 std::string 的地址!
不过,如果有任何方法可以直接通过可变长度参数列表来支持字符串,那就太好了。谢谢!
【问题讨论】:
【参考方案1】:不——正如编译器所说,您只能将 POD 类型的对象传递给可变参数函数。
您通常想要做的是首先消除使用可变参数函数,例如使用 iostream 代替 printf(或 stringstream 代替 sprintf)。
【讨论】:
嗯,我喜欢 sprintf 的原因是您可以自动将 ints/doubles 转换为字符串的方式,以及使用它的好格式。当 iostreams/stringstreams 混合了许多变量和间隔符时,它对我来说似乎很笨拙,即“你好 %s,时间是 %d:%d:%d,在第 %d 个月的第 %d 天。” 你看过Boost格式吗? boost.org/doc/libs/1_46_0/libs/format/index.html @FurryHead:使用字符串流进行简单转换的最简单方法是使用boost::lexical_cast
;它实现起来很简单,您可以在 Herb Sutter 的文章中找到基本实现,"The String Formatters of Manor Farm"
@FurryHead:我想说的是流版本更容易阅读,而且更容易维护,因为一切都是内联的。
@Johnsyweb:然后你得到一个法国人(我),他让你翻译文本,突然 IOStreams 不再方便了。以上是关于c++已经是字符串string了,怎么具体提取其中的某个字母的主要内容,如果未能解决你的问题,请参考以下文章