1.给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。
输入
一个字符串,长度小于100000。
输出
输出第一个仅出现一次的字符,若没有则输出no。
样例输入
abcabd
样例输出
c
#include <iostream>
#include<stdio.h>
#define MAX 100000
using namespace std;
char num[MAX];
int main()
{
int i = 0;
int length;
int alp[27];//存26个英文字母
for (int j = 0; j < 27; j++)
{
alp[j] = 0;
}
fgets(num, MAX, stdin);
while (num[i])
{
alp[num[i] - 'a']++;
i++;
}
length = i-1;
//cout << length << endl;
i = 0;
for(;i<length;i++)
{
if (alp[num[i]-'a']==1)
{
cout << num[i] << endl;
break;
}
}
//cout << i << endl;
if(i>=length)
cout << "no" << endl;
return 0;
}
2.输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。试输出第1个最长的单词和第1个最短单词。
输入
一行句子。
输出
两行输出:
第1行,第一个最长的单词。
第2行,第一个最短的单词。
样例输入
I am studying Programming language C in Peking University
样例输出
Programming
I
提示
如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。
#include <iostream>
#include<string.h>
using namespace std;
const int MAX_LENGTH = 21000;
const int MAX_WORD = 200;
char setence[MAX_LENGTH];
char word[MAX_WORD];
char min_word[MAX_WORD];
char max_word[MAX_WORD];
int main()
{
int length = 0, min_length = 100, max_length = 0;
int i = 0, j = 0;
fgets(setence, MAX_LENGTH, stdin);//读取句子
while (setence[i] != '\n'&&setence[i]!='\0')
{
if (setence[i] != ' ' && setence[i] != ',' && setence[i] != '\n')
{
while (setence[i] != ' ' && setence[i] != ','&&setence[i]!='\n')//读取单词
{
length++;
word[j] = setence[i];
j++;
i++;
}
word[j] = '\0';
if (length < min_length)
{
strcpy(min_word, word);
min_length = length;
}
if (length > max_length)
{
strcpy(max_word, word);//判断
max_length = length;
}
length = 0;//归0
j = 0;
i++;
}
else i++;//跳过, 。
}
cout << max_word <<'\n' << min_word;
return 0;
}