概述
String Task CodeForces - 118A
Petya started to attend programming lessons. On the first lesson his task was to write a simple program. The program was supposed to do the following: in the given string, consisting if uppercase and lowercase Latin letters, it:
- deletes all the vowels,
- inserts a character “.” before each consonant,
- replaces all uppercase consonants with corresponding lowercase ones.
Vowels are letters “A”, “O”, “Y”, “E”, “U”, “I”, and the rest are consonants. The program’s input is exactly one string, it should return the output as a single string, resulting after the program’s processing the initial string.
Help Petya cope with this easy task.
Input
The first line represents input string of Petya’s program. This string only consists of uppercase and lowercase Latin letters and its length is from 1 to 100, inclusive.
Output
Print the resulting string. It is guaranteed that this string is not empty.
Examples
Input | Output |
---|---|
tour | .t.r |
– | – |
Codeforces | .c.d.f.r.c.s |
– | – |
aBAcAba | .b.c.b |
中文:
字符串任务代码- 118A
pETya开始参加编程课程。在第一节课上,他的任务是编写一个简单的程序。这个程序应该是这样做的:在给定的字符串中,如果大写字母和小写拉丁字母组成,则:
·删除所有元音,
·插入一个字符“.”在每个辅音之前,
·把所有大写辅音替换成相应的小写字母。
元音是字母“A”、“O”、“Y”,“E”、“U”、“I”,其余的是辅音。程序的输入正好是一个字符串,它应该将输出返回为一个字符串,在程序处理初始字符串之后,帮助PITYA处理这个简单的任务。
输入
第一行表示petyas程序的输入字符串。此字符串仅由大写字母和小写拉丁字母组成,其长度为1到100,含。
输出
打印结果字符串。它保证此字符串不是空的
例子
输入 | 输出 |
---|---|
tour | .t.r |
– | – |
Codeforces | .c.d.f.r.c.s |
– | – |
aBAcAba | .b.c.b |
题意概括:
输入一个字符串,将大写字母换成小写字母,并且去掉字符串中的元音字母,然后按照.(字母)。。。。。。.(字母).(字母)的格式输出。
解题思路:
因为需要在字母中插入’.’,所以使用两个字符数组:char n[101];char m[201];用n接受字符串,然后使用循环改变字母大小写和记录元音字母的下标(方便赋值时候跳过),最后用循环将n中字符串转移的m中并且插入’.’。
问题1.最后输出整个m数组,所以需要给m数组初始化0,否则输出时会出现乱码。
方法:我使用memset函数给数组初始化。
memset(m, 0, 201 * sizeof(char));
**
注意:用menset对非字符型数组赋初值是不可取的
**
问题2.’.‘没处理好,容易使字符串的最后一个为’.’,这是不符合题意的。
方法:赋值循环中利用if语句判断一下。
if (m[strlen(m)-1] == '.') m[strlen(m)-1] = 0;
代码:
#include <iostream>
#include<cstring>
using namespace std;
int main()
{
char n[101];//接受原字符串
char m[201];//接受修改后的字符串,最后输出
memset(m, 0, 201 * sizeof(char));//字符串初始化
cin >> n;
//用来记录元音的下标
int r = 0;
int a[100];
for (int i = 0; i < strlen(n); i++)
{
//按顺序记录元音的下标
if (n[i] == 'a' || n[i] == 'o' || n[i] == 'y' || n[i] == 'e' || n[i] == 'u' || n[i] == 'i' ||
n[i] == 'A' || n[i] == 'O' || n[i] == 'Y' || n[i] == 'E' || n[i] == 'U' || n[i] == 'I')
{
a[r] = i; r++;
};
//把大写字母变成小写
if (n[i] >= 'A'&&n[i] <= 'Z') n[i] += 32;
}
r = 0;
//p控制m,q控制n
for (int p = 0, q = 0; q < strlen(n); )
{
if (p == 0) { m[p] = '.'; p++; } //给m[0]赋'.'
else if (m[p - 1] != '.') { //如果m[p-1]不是'.',则给m[p]赋'.'
m[p] = '.';
p++;
}
if (q == a[r]) { q++; r++; continue; } //如果n[q]是元音,则跳过后面的赋值
else { m[p] = n[q]; q++; p++; }
}
if (m[strlen(m)-1] == '.') m[strlen(m)-1] = 0;//防止字符串最后为'.'
cout << m << endl; //输出目标字符串
return 0;
}
最后
以上就是迷人画板为你收集整理的ACM训练题--第1题的全部内容,希望文章能够帮你解决ACM训练题--第1题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复