华科机试(2)——字符串

1.找位置——题目描述

对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12 输出:a,1;a,4;a,5;a,10,b,2;b,11,1,8;1,12, 2,9;2,13。

输入描述:

输入包括一个由字母和数字组成的字符串,其长度不超过100。

输出描述:

可能有多组测试数据,对于每组数据,
按照样例输出的格式将字符出现的位置标出。

1、下标从0开始。
2、相同的字母在一行表示出其出现过的位置。
示例1

输入

abcaaAB12ab12

输出

a:0,a:3,a:4,a:9
b:1,b:10
1:7,1:11
2:8,2:12
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int main()
{
    char str[101];
    int i,j,len,loc,flag;
    while(scanf("%s",str)!=EOF)
    {
        len = strlen(str);
        for(i=0;i<len;i++)
        {
            loc = i;
            flag = 0;
            for(j=i+1;j<len;j++)
            {
                if(str[i]==str[j]&&str[j]!=' ')
                {
                    printf("%c%c%d%c",str[i],':',loc,',');
                    str[j]=' ';
                    loc = j;
                    flag = 1;
                }
            }

            if(flag)
            {
                printf("%c%c%d\n",str[i],':',loc);
            }

        }
    }
    return 0;
}

思路:设置一个字符串数组,输入之后,获取字符串数组的长度。

对于第i个字符,从第i+1个字符开始,寻找与第i个字符相同的字符,找到之后按照输出格式输出相同字符出现的前一个位置。

且将现在的字符换成空格' ',且下次进行循环查找时,碰到空格字符直接跳过比较下一个字符,优化程序。

等到比较循环停止,判断标志值是否为0。若为0,则说明并未找到与第i个字符相同的字符;若为1,则说明找到了与第i个字符相同的字符,此时将最后一个与之相同的字符所在位置输出,并换行。

复习:C++ string类型的字符串长度获取的三种方法:

(1)用string的成员方法length()获取字符串长度。string str="abc"; str.length()

(2)用string的成员方法size()获取字符串长度,表示string这个容器中的元素个数。string str="abc"; str.size()

(3)用strlen(char*)获取字符串数组char*类型的实际长度(不含字符串结束标志'\0'):从第一个元素直到遇到第一个'\0'结束,string str="abc"; strlen(str.c_str()),这里采用c_str()实现字符串到字符串数组char*类型的转换。

2.统计单词——题目描述

编一个程序,读入用户输入的,以“.”结尾的一行文字,统计一共有多少个单词,并分别输出每个单词含有多少个字符。 (凡是以一个或多个空格隔开的部分就为一个单词)

输入描述:

输入包括1行字符串,以“.”结束,字符串中包含多个单词,单词之间以一个或多个空格隔开。

输出描述:

可能有多组测试数据,对于每组数据,
输出字符串中每个单词包含的字母的个数。
示例1

输入

hello how are you.

输出

5 3 3 3
#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    char str[1000];
    int i,num;
    while(scanf("%s",str)!=EOF)
    {
        num=0;
        for(i=0;str[i]!='\0'&&str[i]!='.';i++)
        {
            num++;
        }
        if(str[i]=='.')
            printf("%d",num);
        else
            printf("%d%c",num,' ');
    }
    return 0;
}

注意:%s:输入输出字符串,%c输入输出单个字符;字符串用""(双引号),单个字符用''(单引号);

'A'代表单个字符'A';字符串"A"表示单个字符'A'和一个空字符,空字符(null)是C和C++用来标记字符串结束的符号

循环条件scanf("%s",&str)!=EOF,EOF是End Of File,在计算完一个单词的长度之后,若后面还有单词,则继续进行计数;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值