华电北风吹
2017-02-23
题目链接:
http://hihocoder.com/problemset/problem/1082
题目分析:
本来以为要划分出单词判断的,没想到想多了。
参考代码:
#include <iostream>
#include <string.h>
using namespace std;
char input[205];
char s1[10] = "marshtomp";
char s2[10] = "fjxmlhx";
int main()
{
string s;
int ls1 = strlen(s1);
int ls2 = strlen(s2);
while (cin.getline(input, 205))
{
int len = strlen(input);
int start = 0, p = 0;
while (start <= len)
{
int i = 0;
for (; i < ls1; i++)
{
if ((input[start + i] != s1[i]) && (input[start + i] != s1[i] - 32))
break;
}
if (i == ls1)
{
for (int k = 0; k < ls2; k++)
{
input[p + k] = s2[k];
}
start += ls1;
p += ls2;
}
else
{
input[p] = input[start];
p++;
start++;
}
}
printf("%s\n", input);
}
return 0;
}
下面的虽然是错误代码,但是划分的思路还是很好的,也保存一下。
#include <iostream>
#include <string.h>
using namespace std;
char input[205];
char output[205];
char s1[10] = "marshtomp";
char s2[10] = "fjxmlhx";
bool CheckWord(int start, int end)
{
if ((end - start) != 8)
{
return false;
}
for (int i = 0; i < 9; i++)
{
if ((input[start + i] != s1[i]) && (input[start + i] != s1[i] - 32))
return false;
}
return true;
}
bool isalphabet(int num)
{
if ((num >= 'a') && (num <= 'z'))
{
return true;
}
if ((num >= 'A') && (num <= 'Z'))
{
return true;
}
return false;
}
int main()
{
string s;
while (cin.getline(input, 205))
{
int len = strlen(input);
int start = 0, end = 0, position = 0;
while (start <= len)
{
while ((isalphabet(input[start]) == false) && (start <= len))
{
output[position] = input[start];
position++;
start++;
}
if (start >= len)
break;
end = start + 1;
while ((isalphabet(input[end]) == true) && (end < len))
{
end++;
}
if (isalphabet(input[end]) == false)
end--;
if (CheckWord(start, end))
{
for (int i = 0; i < 7; i++)
{
output[position] = s2[i];
position++;
}
}
else
{
for (int i = start; i <= end; i++)
{
output[position] = input[i];
position++;
}
}
start = end + 1;
}
printf("%s\n", output);
}
return 0;
}
毕业后很久没写代码了,写的第一道题目,拿个简单的练练手,但是没想到题目理解错了浪费了好久。