删除单词后缀
题目描述
给一组各分别以er、ly和ing结尾的单词, 请删除每个单词的结尾的er、ly或ing, 然后按原顺序输出删除后缀后的单词(删除后缀后的单词长度不为0)。
关于输入
输入的第一行是一个整数n(n≤50),表示后面有n个单词;
其后每行一个单词(单词中间没有空格,每个单词最大长度为32)。
关于输出
按原顺序输出删除后缀后的单词。
例子输入
3 referer lively going
例子输出
refer live go
提示信息
使用strlen(str)方法可以知道字符串的长度;
使用strcmp(str1,str2)可以判断两个字符串是否相等;
注意,这两个函数都在string.h中。
解题分析
只要利用好strcmp函数即可
#include <stdio.h>
#include <string.h>#define MAX_LEN 33int main() {int n, i;char word[MAX_LEN];scanf("%d", &n); // 输入单词的数量for(i = 0; i < n; i++) {scanf("%s", word); // 输入单词int len = strlen(word); // 计算单词的长度// 检查单词的后缀,并删除它if(len >= 2 && strcmp(word + len - 2, "er") == 0) {word[len - 2] = '\0';} else if(len >= 2 && strcmp(word + len - 2, "ly") == 0) {word[len - 2] = '\0';} else if(len >= 3 && strcmp(word + len - 3, "ing") == 0) {word[len - 3] = '\0';}printf("%s\n", word); // 输出删除后缀后的单词}return 0;
}
当然,也可以选择最后的时候不输出
#include <iostream>
#include <cstring>
using namespace std;
char words[55][40];
int main(){int n; cin>>n;for(int i=0;i<n;i++){scanf("%s",words[i]);}for(int i=0;i<n;i++){int len=strlen(words[i]);for(int j=0;j<len;j++){if(j==len-3 || j==len-2){if(strncmp(words[i]+j,"er",2)==0 || strncmp(words[i]+j,"ly",2)==0 || strncmp(words[i]+j,"ing",3)==0){break;}}printf("%c",words[i][j]);}printf("\n");}return 0;
}