华为机试—字符串中找出单词排序

题目:

在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格、问号、数字等等;另外单个字母不算单词);找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出空串。输出的单词之间使用一个“空格”隔开,最后一个单词后不加空格。

要求实现函数:

void my_word(charinput[], char output[])

【输入】 char input[], 输入的字符串

【输出】 char output[],输出的字符串

【返回】 无

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

void my_word(char input[],char output[])
{
    char *p;
	char *temp;
    char *word[10];
    int len_input=strlen(input);
    int i,j;
    char except[] = ",";
    char *blank = " ";  

    for (i=0;i<len_input;i++)
    {
        if (input[i]<'A' || (input[i]>'Z'&&input[i]<'a') || input[i]>'z')
        {
            input[i]=',';
        }
    }  

    j=0;
    /*保存取出的单词*/
	p= strtok(input,except);  

    while(NULL!=p)
    {
        word[j++]=p;
        p= strtok(NULL,except);
    } 

    for(i=0;i<j;i++)
		printf("%s ",word[i]);
	printf("\n");

	int wordlen=j;
    /*对单词按照长度降序排序,冒泡法*/
    for (i=0;i<wordlen;i++)
    {
        for (j=1;j<wordlen-i;j++)
        {
            if(strlen(word[j-1])<strlen(word[j]))
            {
                temp=word[j];
                word[j]=word[j-1];
                word[j-1]=temp;
            }
        }  

    } 

    /*删除相同单词*/
    for (i=0;i<wordlen;i++)
    {
        for(j=i+1;j<wordlen;j++)
        {
            if(strcmp(word[i],word[j])==0)
                word[j]="\0";
        }
    }  

    /*将单词连接起来输出*/
    for (j=0;j<wordlen;j++)
    {
		if (j==0)
			strncpy(output,word[j],strlen(word[j])+1);
        else
        {
            strcat(output,blank);
            strcat(output,word[j]);
        }
    }
}  

int main()
{
	char input[] ="some local buses, some1234123drivers";
	printf("筛选之前的字符串:%s\n",input);
    char output[30];
    my_word(input,output);
    printf("筛选之后的字符串:%s",output);
    printf("\n");
    return 0;
}

时间: 2024-08-08 05:36:44

华为机试—字符串中找出单词排序的相关文章

华为机试—给定字符串中找出单词

题目: 在给定字符串中找出单词("单词"由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格.问号.数字等等:另外单个字母不算单词):找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中:如果某个单词重复出现多次,则只输出一次:如果整个输入的字符串中没有找到单词,请输出空串.输出的单词之间使用一个"空格"隔开,最后一个单词后不加空格. 要求实现函数: void my_word(charinput[

[华为机试练习题]43.在字符串中找出连续最长的数字串

题目 描述: 请一个在字符串中找出连续最长的数字串,并把这个串的长度返回:如果存在长度相同的连续数字串,返回最后一个连续数字串: 注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串"1234"的长度就小于数字串"1359055",如果没有数字,则返回空字符串("")而不是NULL! 样例输入 abcd12345ed125ss123058789 abcd12345ss54761 样例输出 输出123058789,函数返回值9 输出547

【c语言】第一个只出现一次的字符题目:在字符串中找出第一个只出现一次的字符

// 第一个只出现一次的字符题目:在字符串中找出第一个只出现一次的字符. // 如输入"abaccdeff",则输出'b'. #include <stdio.h> #include <string.h> char find_one(char *str) { int a[256]; int len = strlen(str); int i = 0; memset(a, 0, sizeof(a)); for (i = 0; i<len; i++) { a[st

在字符串中找出第一个只出现一次的字符

题目: 在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",则输出'b'. 题目分析: 对于在字符串中找出第一个出现一次的字符,联系ASCII码表,能够得到有256中不同的字符,可以利用字符的编码,将每个字符的编码作为数组的下表,建立一个有256个元素的数组arr[256],将数组中的每一个元素对应统计字符的个数,从字符串的第一个字符进行遍历,遇到一个字符给对应的数组元素加1,当数组中的其中一个元素变到2,则输出这个元素所对应的数组下表,即就是这个字符的ASCII码.

在字符串中找出连续最长的数字串 在字符串中找出连续最长的数字串,并把这个串的长度返回

写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存.例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9, #include<iostream> using namespace std; int ContinueMax(char *

[LeetCode] 在一堆字符串中找出包含相同字符的 group的较快方法,题 Anagrams

题目: Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be in lower-case. class Solution { public: vector<string> anagrams(vector<string> &strs) { } }; 题意本身并不是很清晰,开始我的代码总是报Output Limit Exceeded,

在字符串中找出第一个只出现一次的字符。 如输入“abaccdeff”,则输出&#39;b&#39;。

在字符串中找出第一个只出现一次的字符. 如输入"abaccdeff",则输出'b'. 这个题加一些要求维度只能为n 代码如下: #include <stdio.h> #include <assert.h> char FLetter(char arry[],int len) {              int letterNumber[256] = {0};              int i = 0;              char *ch  = arr

【C语言】在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出’b’

//在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",则输出'b' #include <stdio.h> #include <memory.h> char OneTime(char * str) { int data[256]; char *p = str; if (*p == '\0') return '\0'; memset(data, 0, sizeof(data)); while (*p ) { data[*p++]++; //把每种字

在字符串中找出第一个只出现一次的字符串,如输入&quot;abaccdeff&quot;,输出&#39;b&#39;

在字符串中找出第一个只出现一次的字符串,如输入"abaccdeff",输出'b' 1 char firstNotRepeatingChar(char *str) 2 { 3 /* hash表存储 每个可能出现的字符作为索引值 数组内容即为出现的次数 */ 4 char ret = '\0'; 5 // 1.建立hashtable 6 const int size = 256; 7 // 全部初始化为0 8 int hashtable[size] = {0}; 9 char *hashK