C++ 如何限制字符数组只使用';s和b';s来自c+中的字符串+;?
我有一个程序,它把字符串转换成字符数组。我想创建不带正则表达式库的正则表达式,它接受a和b的所有字符串,其中a和b的C++ 如何限制字符数组只使用';s和b';s来自c+中的字符串+;?,c++,arrays,string,C++,Arrays,String,我有一个程序,它把字符串转换成字符数组。我想创建不带正则表达式库的正则表达式,它接受a和b的所有字符串,其中a和b的aa在某处 我下面的代码工作正常,但唯一的问题是它接受a和b以外的字符,例如它也接受baabss。 您能否帮助更正代码,使其在这种情况下拒绝字符串 #include <iostream> #include <fstream> #include <string> using namespace std; int main() { stri
aa
在某处
我下面的代码工作正常,但唯一的问题是它接受a和b以外的字符,例如它也接受baabss
。
您能否帮助更正代码,使其在这种情况下拒绝字符串
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
string input_string;
char char_string[20];
int counter=0;
cout << "type in some input text:$" << endl;
cin >> input_string;
strcpy(char_string, input_string.c_str());
for (int i = 0; i < sizeof(input_string); i++)
{
if(char_string[i]=='a' || char_string[i]=='b'){
switch(char_string[i])
{
case 'a' :
counter++;
break;
case 'b' :
if(counter==1){
counter=0;
}
break;
}
}
}
if(counter==2){
cout << "String accepted" << endl;
}
else{
cout << "String not accepted" << endl;
}
std::cin.get();
system ("PAUSE");
}
#包括
#包括
#包括
使用名称空间std;
int main(){
字符串输入_字符串;
字符字符串[20];
int计数器=0;
无法输入_字符串;
strcpy(char_string,input_string.c_str());
for(int i=0;i 无法解决无效字符的问题
在循环体中,必须拒绝既不是a也不是b的字符。因此必须完成
if(char_string[i]=='a' || char_string[i]=='b'){
...
}
带有else
子句。例如:
else {
counter=0; // reset the counter so that the final check will fail
break; // exit the for loop
}
到目前为止尚未检测到的问题
第一个问题是sizeof(input\u string)
不会返回您期望的结果!请改用input\u string.size()
然后程序将无法接受baaab
,因为它将导致循环以计数器为3结束。因此,您必须将最终检查更改为:
if(counter>=2){ // instead of ==
哎呀!
最后,如果用户输入的字符超过19个,则程序将具有未定义的行为,因为strcpy()
将复制比数组中更多的字符,从而导致内存损坏。可用于纠正此问题的策略:
使用(例如,cin>>setw(19)>>input\u string;
使用strncat()
限制副本的大小,并在输入被截断时通知用户。然后还必须确保循环不会超出截断的大小
您可以直接访问input\u string
中的原始字符,而无需进行任何复制。或者,如果愿意,您可以使用从字符串初始化的向量重新放置字符数组:vectorchar\u string(input\u string.begin(),input\u string.end());
为什么需要转换为字符数组?运算符[]
将使用std::string
。我这样做是为了将每个字符与开关匹配statement@Inam问题是,如果字符串具有外部属性,则不会拒绝该字符串char@JakeFreeman...谢谢,先生我现在明白了我跳过了其他部分working@Inam你能支持我的评论吗?christphe…谢谢你先生我现在明白了很好…你很棒