C++:查找字符串中的字符

重要信息

这个问题困扰了我两个晚上,第一次遇到这样的问题.

使用G++作为C++编译器的同学,打开警告信息[编译时在文件后面加上: -Wall ]吧,就因为原来没开启编译警告信息才困扰了这么久啊.

C++.
image-2025

问题描述

读入一个字符串,判断其中是否包含ff,fl,fi,输出次数.

解决方案

注意:”>>>”注释后面是修改句.

错误版本1


/*************************************************************************
> File Name: test.5.12.cpp
> Author: puruidong
> Mail: 1@w1520.com
> Created Time: 2014年03月12日 星期三 23时07分44秒
************************************************************************/

//逻辑错误
//会重复统计出现次数.

#include
using namespace std;
//统计ff,fl,fi的数量

int main()
{
cout << "请输入字符(可包括:ff,fi,fl):" << endl; int result=0; string pa; cin >> pa;
int index= 0 ;//记录位置.
for (int t=0;t!=pa.size();++t)//>>>++t出现异常.
{
//判断第一个字符是否是f.
if(pa[t]=='f')
{
index = t;
}
//首先,位置不能为最后一个,然后判断下一位是否为f,l,i.
char parts = pa[index+1];//这个index依然顺序出现,出现值顺序为:1,2,3..字符长度,因此出现逻辑错误.
switch(parts)
{
case 'f':
case 'l':
case 'i':
result+=1;
break;
}
}
cout << "包含ff,fl,fi的个数是:" << result << endl; return 0; }

错误版本2


/*************************************************************************
> File Name: test.5.12.cpp
> Author: puruidong
> Mail: 1@w1520.com
> Created Time: 2014年03月12日 星期三 23时07分44秒
************************************************************************/

//ERROR,运行错误!!!
//死循环.无法正常运行.

#include
using namespace std;
//统计ff,fl,fi的数量

int main()
{
cout << "请输入字符(可包括:ff,fi,fl):" << endl; int result=0; string pa="ff"; cin >> pa;
cout << pa.size() << endl; for(int index=0;index<=pa.size();index+2)//>>>修改了此句.index+2虽然刻意改变了index的值,但是并未返回.
{

cout << pa.size() << endl; if(pa[index]=='f') { switch(pa[index+1]) { case 'f': case 'l': case 'i': result+=1; break; } } } cout << "包含ff,fl,fi的个数是:" << result << endl; return 0; }

可运行版本


/*************************************************************************
> File Name: test.5.12.3.cpp
> Author: puruidong
> Mail: 1@w1520.com
> Created Time: 2014年03月13日 星期四 02时32分45秒
************************************************************************/

//ok.

#include
using namespace std;
//统计ff,fl,fi的数量

int main()
{
cout << "请输入字符(可包括:ff,fi,fl):" << endl; int result=0; string pa="ff"; cin >> pa;
//>>>第一个位置是0,下一个位置应该是2,所以index+=2将值增加之后返回至index.
for(unsigned index=0;index!=pa.size();(index+=2))
{
if(pa[index]=='f')//判断第一个字符是f,就进入到switch.
{
switch(pa[index+1])//下一个位置如果是下面三个字符就对返回值+1.
{
case 'f':
case 'l':
case 'i':
result+=1;
break;
}
}
}

cout << "字符串的长度是:" << pa.size() << "\n包含ff,fl,fi的个数是:" << result << endl; return 0; }

继续学习ING,加油!!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据