PAT A1077 Kuchiguse (20 分)

75 篇文章 0 订阅

PAT A1077 Kuchiguse (20 分)

The Japanese language is notorious for its sentence ending particles. Personal preference of such particles can be considered as a reflection of the speaker’s personality. Such a preference is called “Kuchiguse” and is often exaggerated artistically in Anime and Manga. For example, the artificial sentence ending particle “nyan~” is often used as a stereotype for characters with a cat-like personality:

Itai nyan~ (It hurts, nyan~)

Ninjin wa iyada nyan~ (I hate carrots, nyan~)

Now given a few lines spoken by the same character, can you find her Kuchiguse?

Input Specification:
Each input file contains one test case. For each case, the first line is an integer N (2≤N≤100). Following are N file lines of 0~256 (inclusive) characters in length, each representing a character’s spoken line. The spoken lines are case sensitive.

Output Specification:
For each test case, print in one line the kuchiguse of the character, i.e., the longest common suffix of all N lines. If there is no such suffix, write nai.

Sample Input 1:
3
Itai nyan~
Ninjin wa iyadanyan~
uhhh nyan~
Sample Output 1:
nyan~
Sample Input 2:
3
Itai!
Ninjinnwaiyada T_T
T_T
Sample Output 2:
nai

以下是AC的代码:

#include<cstdio>
#include<cstring>
#define len 260
char words[len][len];
void revers(char a[]){
	int lens=strlen(a);
	for(int i=0;i<lens/2;i++){
		char temp=a[i];
		a[i]=a[lens-1-i];
		a[lens-1-i]=temp;
	}
}
int main(void){
	int total;
	bool nai=false;
	scanf("%d",&total);
	getchar();
	for(int i=0;i<total;i++){
		int j=0;
		char temp;
		while(1){
			scanf("%c",&temp);
			if(temp=='\n'){
				words[i][j]='\0';
				break;
			}
			words[i][j++]=temp;
		}
		revers(words[i]);
	}
	for(int i=1;i<total;i++){
		int lena=strlen(words[0]);
		int lenb=strlen(words[i]);
		int lenmin=lena<lenb?lena:lenb;
		if(lenmin==0){//ans中字符都被删完了; 
			nai=true;
			break;
		}
		for(int j=0;j<lenmin;j++){
			if(words[0][j] != words[i][j]){
				words[0][j]='\0';
				break;
			}
		}
	}
	if(nai){
		printf("nai");
	}else{
		revers(words[0]);
		printf("%s",words[0]);
	}
	return 0;
}

思路:
找 N 个含空格字符串的公共后缀问题。首先,建一个字符串数组,将字符串都扫进来,放进去,再都翻转(方便比较后缀);然后直接用第一个字符串 ,也就是words[0] 跟后面的每个字符串比,字符相同啥都不做,不同直接让words[0] 这里放一个终止符’\0’,相当于把 words[0] 后面的都丢了不要了,最后words[0]里面剩下的部分就是公共后缀,翻转再输出即可。
这里过程中出了一个问题,因为每行之间都有空格,所以不能用 scanf("%s",&words[i]), 我扫的时候犯了一个错误,就是把换行符 ‘\n’也放在了字符串末尾,最后程序运行的时候,如果没有公共后缀就会输出一个换行符,如果有公共后缀就会输出后缀加一个换行符。所以需要注意,千万不要把’\n’也扫进去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值