educoder 字符串统计

  • Post author:
  • Post category:其他


题目描述:输入一段字符(由空格、字母和数字几种组成,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。以stop作为最后输入的字符串。

本题考察的内容有多组输入,以及一些字符串函数的运用。本题的思路比较简单,就是讲每一个字符串的长度求出来,然后在比较每一个字符串的长度,并分类存储。因为一般的输入遇到空格便会停止输入,所以输入时不要用scanf,或者cin,可以用gets(),fgets(),或者getline,注意,c++中的getline不能直接给数组赋值,可以用string定义一个str,然后直接将str当做数组来用。接下来便是单词存放的问题了,我用的是二维数组,每一行存一个单词,然后列存相应的字母。在使用二维数组时,可以直接以一维数组形式读取单词。例如:

            m y
            n a m e
            i s
            A m y

这是在二维数组中存放时的形式,a[0]=“my”;a[1]=“name”;像这样便能实现单词的读取。

最后补充一点,记得数组使用后的及时清零,以及变量的清零。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

char str[1000];
char word[1000][200];
char word2[1000][200];
int geshu[1000];
int number[1000];

int main()
{
    int num=0,len=0,nums=0,j=0;
    while(strcmp(str,"stop")){
        memset(str,'0',sizeof(str));
        gets(str);
        for(int i=0;str[i]!='\0';i++){
            if(str[i]!=' '){
                word[num][len]=str[i];
                len++;
                nums++;
            }
            else{
                num++;
                len=0;
            }
        }
        len=0;
        for(int i=0;i<=num;i++){
           number[i]=strlen(word[i]);
        }
        int max=number[0],inmax=0;
        for(int i=0;i<=num;i++){
            if(number[i]>max){
                max=number[i];
                inmax=i;
            }
        }
        geshu[j]=nums;
        strcpy(word2[j],word[inmax]);
        j++;
        nums=0;
        num=0;
        memset(word,0,sizeof(word));
        memset(number,0,sizeof(number));;
    }
    for(int i=0;i<j-1;i++){
        printf("%d %s\n",geshu[i],word2[i]);
    }
    return 0;
}



版权声明:本文为qq_50949298原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。