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

重要信息

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

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

C++.
image-2025

问题描述

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

解决方案

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

错误版本1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*************************************************************************
    > File Name: test.5.12.cpp
    > Author: puruidong
    > Mail: 1@w1520.com
    > Created Time: 2014年03月12日 星期三 23时07分44秒
 ************************************************************************/

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

#include<iostream>
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*************************************************************************
    > File Name: test.5.12.cpp
    > Author: puruidong
    > Mail: 1@w1520.com
    > Created Time: 2014年03月12日 星期三 23时07分44秒
 ************************************************************************/

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

#include<iostream>
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;
}

可运行版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*************************************************************************
    > File Name: test.5.12.3.cpp
    > Author: puruidong
    > Mail: 1@w1520.com
    > Created Time: 2014年03月13日 星期四 02时32分45秒
 ************************************************************************/

//ok.

#include<iostream>
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来减少垃圾评论。了解我们如何处理您的评论数据