17-03 找最长单词和各单词的长度
17-03 找最长单词和各单词的长度
-
- 题目问题描述:
- 思路分析:
- 结果截图:
- 实现代码:
题目问题描述:
- 输出每个单词及其长度;
- 输出最长的单词
思路分析:
问题:
- 如何得到单词 和 单词长度;
- 如何找到 最长的单词;
- 如果有多个最长单词应该如何输出;
- 输出格式,最后一个不要逗号
解决:本题做的较为 繁琐
过程:得到单词/长度-->找到最长的单词长度-->寻找相同最长单词的下标--->根据下标输出单词
- 利用gets得到一串字符;二维数组存储单词,一维数组存储长度,依次取,下标则相同
- 循环比较最大值,社初值为首位依次找;
- 在遍历依次长度数组,找是否有相同最大值;
- 按照所得最大值下标找到对应的单词,输出时设置计数器,小于最大值个数时才输出 逗号
结果截图:
实现代码:
#include<stdio.h>
#include<string.h>
int main(){
char a[100] ={0}; //一行字符串
char b[20][100] ={0};//存储每个 单词的数组
int len[20]; //存储每单词 长度的数组
int i = 0 ; //遍历一行字符串的变量
int k = 0; //每个单词的长度
int m = 0; //一行中有多少单词
int maxlen =0; // 最大的长度
int max_index[20]; //最长单词的下标序列
int max_s = 0; //最长的单词的个数
int geshi_num =0; //输出逗号格式
gets(a); //the benefits it can offer
//this is a book
while(a[i] != 0){ //将一行字的字符中的单词存入单词数组;长度存入长度数组
if(a[i] != ' '){
b[m][k] = a[i];
k++;
}
else{
len[m] = k;
m++;
k = 0;
}
i++;
}
len[m] = k; // 最后一位的单词长度;
maxlen = len[0]; //找到最长的单词
for(int j = 0;j <= m;j++){
printf("%-10s\t%d\n",b[j],len[j]);
if(len[j] > maxlen){
maxlen = len[j];
}
}
for(j = 0;j <= m;j++){ // 寻找是否有相同最大值的单词,记录下标
if(len[j] == maxlen){
max_index[max_s++] = j;
}
}
printf("\nthe longest word is: ",max_s);
for(j = 0;j < max_s;j++){ //根据下标 找到最大值;
printf("%s",b[max_index[j]]);
if(geshi_num < max_s-1){ //输出格式:最后一个元素后面不加逗号
printf(", ");
geshi_num++;
}
}
printf("\n");
}
实现代码答:
#include<stdio.h>
#include<string.h>
int po[20], poj = 0;
int le[20], lek = 0;
int cache[10] = {}, cac_len = 0;
int alphabetic(char c){
if((c >= 'a' && c <= 'z') || (c >= 'A' && c<='Z'))
return 1;
else
return 0;
}
int longest(char string[]){
int len = 0, i, length = 0, flag = 1, place , point;
for(i = 0; i <= strlen(string); i++){
if(alphabetic(string[i])){
if(flag){
point = i;
po[poj++] = point;
flag = 0;
}
len++;
}else{
flag = 1;
le[lek++] = len;
if(len >= length){
if(len > length){
for(int c = 0; c < 10; c++){
cache[c] = 0;
}
cac_len = 0;
}
length = len;
place = point;
cache[cac_len++] = place;
}
len = 0;
}
}
return place;
}
void main(void){
int i;
char line[100];
printf("输入一行文本\n");
gets(line);
longest(line);
for(i = 0; i < poj; i++){
for(; alphabetic(line[po[i]]); po[i] = po[i] + 1){
printf("%c", line[po[i]]);
}
printf("%6d\n", le[i]);
}
printf("\nthe longest word is: ");
for(i = 0; i < cac_len; i++){
for(; alphabetic(line[cache[i]]); cache[i] = cache[i] + 1){
printf("%c", line[cache[i]]);
}
printf(" ");
}
printf("\n");
}
炯ya: [code=cpp] #include <iostream> #include <cmath> using namespace std; int main(){ int s,e; int sum=0; int flag = 0; scanf("%d %d",&s,&e); for(int i=s;i<=e;i++){ printf("%5d",i); flag += 1; if(flag==5 && (e-s)>5){ printf("\n"); flag = 0; } sum += i; } printf("\nSum = %d",sum); return 0; } [/code]
CSDN-Ada助手: 算法 技能树或许可以帮到你:https://edu.csdn.net/skill/algorithm?utm_source=AI_act_algorithm