有个程序要实现字符串的处理问题,即输入zero + one + two =
这个时候要求输出答案,我知道用c的字符串数组可以处理,但我想用c++里面的string类来实现,请问该如何写?
问题一:先定义一个string a;
如果用cin>>a;这样的话遇到空格就停止了,如何才能接受一整行数据?
问题二:string类中有哪些方法适用于这个字符串提取?比如我要从”zero + one + two =“当中提取出zero one two等等
请详细说说其参数,在加个例子。谢谢了。。。
谢谢了,但还是想请问一下使用getline怎么总是要回车两次才可以啊?
我用的编译环境是vc6。。
问题一解答:
string str;
getline(cin,str);
问题二解答:
string类的find函数和substr函数可以帮助你。
比如
string line="zero+one+two";
line.find("zero")则返回在line中找到的第一个"zero"字符串在原字符串中所在的位置,如果不存在则返回string::npos
line.find("zero",n);<其中n是一个int型数>,则从下标为n的字母开始找,找到第一个"zero",返回"zero"字符串所在的位置。
则,想找到第5个"zero"字符串的方法:
int last=0;
for (int i=0;i<5;i++)
last=line.find("zero",last);
则last就是第五个"zero"的字母“z"所在的位置。
如果想得到哪个字符串出现的次数也很简单,你自己根据我上面说的编程实现吧。
如果不仅限于此题,substr也许也能用上,你自己在编译器里试试它吧,它的作用是利用下标截取字符串中的一部分字符串(一般先用find找到一些下标,再用substr取截取字符串)
string str;
getline(cin,str);
问题二解答:
string类的find函数和substr函数可以帮助你。
比如
string line="zero+one+two";
line.find("zero")则返回在line中找到的第一个"zero"字符串在原字符串中所在的位置,如果不存在则返回string::npos
line.find("zero",n);<其中n是一个int型数>,则从下标为n的字母开始找,找到第一个"zero",返回"zero"字符串所在的位置。
则,想找到第5个"zero"字符串的方法:
int last=0;
for (int i=0;i<5;i++)
last=line.find("zero",last);
则last就是第五个"zero"的字母“z"所在的位置。
如果想得到哪个字符串出现的次数也很简单,你自己根据我上面说的编程实现吧。
如果不仅限于此题,substr也许也能用上,你自己在编译器里试试它吧,它的作用是利用下标截取字符串中的一部分字符串(一般先用find找到一些下标,再用substr取截取字符串)
温馨提示:答案为网友推荐,仅供参考
第1个回答 2010-02-22
第一个问题:
首先要包含<string>的头文件:#include<string>;
并且必须只能是#include<iostream>;切记不能加".h"!
而且要用using std::string;
其次,在main()中定义 string m_str;(这是全局变量)。
遇到空格就停止那你可以不打空格呀!“one+two=three”这个式子可以不用空格。如果非要接受整行数据就用字符串数组。或getline(),getline被来就需敲两下回车。
的二个问题:
可以用Find()函数在字符串中查找指定的字符或字符串,再用if语句判断然后做出结果。可以将find的返回值保存到一个变量中。
首先要包含<string>的头文件:#include<string>;
并且必须只能是#include<iostream>;切记不能加".h"!
而且要用using std::string;
其次,在main()中定义 string m_str;(这是全局变量)。
遇到空格就停止那你可以不打空格呀!“one+two=three”这个式子可以不用空格。如果非要接受整行数据就用字符串数组。或getline(),getline被来就需敲两下回车。
的二个问题:
可以用Find()函数在字符串中查找指定的字符或字符串,再用if语句判断然后做出结果。可以将find的返回值保存到一个变量中。
第2个回答 推荐于2016-03-27
第一个问题
getline(cin,a);
第二个问题
提取,这个...也就是说把符号去掉?
#include <string>
#include <iostream>
using namespace std;
bool findsymbol(char a);
int main()
{
string str;
string tmpstr;
getline(cin,str);
cout << str << endl;
int i = 0;
while(str[i] != '\0')
{
cout << "str[" << i << "] =" << str[i] << endl;
if(findsymbol(str[i]))//如果是符号,忽略,continue
{
++i;
continue;
}
else
{
tmpstr += str[i];//如果不是符号,就复制到临时string中
}
++i;
}
cout << tmpstr << endl;//最后输出的是临时的
system("pause");
return 0;
}
bool findsymbol(char str)
{
char symbol[5] ={'+','-','*','//','='};
for(int i = 0;i < 6; ++i)
{
if( str == symbol[i])
{
return true;
}
}
return false;
}
补充回答:
如果你需要两下回车才能结束输入,那么你试下这样用getline
getline(cin,str,'\n');本回答被提问者采纳
getline(cin,a);
第二个问题
提取,这个...也就是说把符号去掉?
#include <string>
#include <iostream>
using namespace std;
bool findsymbol(char a);
int main()
{
string str;
string tmpstr;
getline(cin,str);
cout << str << endl;
int i = 0;
while(str[i] != '\0')
{
cout << "str[" << i << "] =" << str[i] << endl;
if(findsymbol(str[i]))//如果是符号,忽略,continue
{
++i;
continue;
}
else
{
tmpstr += str[i];//如果不是符号,就复制到临时string中
}
++i;
}
cout << tmpstr << endl;//最后输出的是临时的
system("pause");
return 0;
}
bool findsymbol(char str)
{
char symbol[5] ={'+','-','*','//','='};
for(int i = 0;i < 6; ++i)
{
if( str == symbol[i])
{
return true;
}
}
return false;
}
补充回答:
如果你需要两下回车才能结束输入,那么你试下这样用getline
getline(cin,str,'\n');本回答被提问者采纳
第3个回答 2010-02-20
C++中有String类吗??java中倒是有个功能强大的String类,C++中在MFC中倒是有一个CString的类定义。