1.找位置——题目描述
输入描述:
输入包括一个由字母和数字组成的字符串,其长度不超过100。
输出描述:
可能有多组测试数据,对于每组数据, 按照样例输出的格式将字符出现的位置标出。 1、下标从0开始。 2、相同的字母在一行表示出其出现过的位置。
输入
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行字符串,以“.”结束,字符串中包含多个单词,单词之间以一个或多个空格隔开。
输出描述:
可能有多组测试数据,对于每组数据, 输出字符串中每个单词包含的字母的个数。
输入
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,在计算完一个单词的长度之后,若后面还有单词,则继续进行计数;