C语言 输入一行字符,统计其中有多少个单词 和 有三个字符串(网上找的代码有瑕疵已解决),找出其中最大者的完整代码及分析过程

C语言编程 专栏收录该内容
68 篇文章 38 订阅

问题1:输入一行字符,统计其中有多少个单词

思考这一类问题的常用解决方法是什么?是这种形式的:
------》最终完整的代码:《------

#include <stdio.h>
// isalpha()用到的库。用来判断一个字符是否是英文字母。
#include <ctype.h>
#define OUT    0
#define IN    1

// 返回字符串的单词数
unsigned countWords(char *str)
{
    int state = OUT;
    unsigned wc = 0;  // 单词数默认为0

    // 遍历字符串str的所有字符
    while (*str)
    {
        // 如果下一个字符是单词的分割符则设置状态为OUT
        if (*str == ' ' || *str == '\n' || *str == '\t')
            state = OUT;

        // 如果下一个字符不是单词的分隔符且状态为OUT且是英文字母,则将状态设置为IN并增加单词计数
        else if ((state == OUT)&& isalpha(*str))
        {
            state = IN;
            printf("\n打印第%u单词:%c%c%c%c%c\n",wc+1,*str,*(str+1),*(str+2),*(str+3),*(str+4),*(str+5));
            ++wc;
        }
        
        // 移动到下一个字符
        ++str;
    }
    
    return wc;
}

// 编程实现代码
int main(void)
{
    char str[] = "One  two  222  @@@  333  three\n  four\t  five  six  ";//注意我这是单词之间是2个空格的案例
    printf("\nThere are %u words\n", countWords(str));
    return 0;
}

在这里插入图片描述
可以看到:
示例
char str[] = "One two 222 @@@ 333 three\n four\t five six ";
最终只有 One two three four five six 这6个单词打印了出来。
像222 @@@ 333不是单词,所以单词数是6。
你可以加 444测试,例如
char str[] = "One two 222 @@@ 333 444 three\n four\t five six ";
单词数仍然是6。(我已经试过了)

眼睛看一眼以下注释:

            //我这是方便你直观地阅读感受程序的效果添加的一行,其实可不要,因为看起来笨了点哈哈
            //你把我的代码原封不动调试完后把这行代码删了,或注释掉。
            //然后你自己把char str[] = "你自己测试的字符串"
            //或者用gets()接受字符串
            //我这也好长时间没写c代码的,怎么简单就怎么来,期待后面的后浪们优化程序哈哈
            //printf("\n打印第%u单词:%c%c%c%c%c\n",wc+1,*str,*(str+1),*(str+2),*(str+3),*(str+4),*(str+5));//一定要记得调试完注释掉这一行代码!!!

------》网上不是太完整的代码:【可能是考试的"标准答案",唉。。。】《------

//输入一行字符,统计其中有多少个单词
#include<stdio.h>
#include<string.h>
int main() 
{   char string[81]; 
    int i,num=0,word=0; 
    char c; 
    gets(string); 
    for(i=0;(c=string[i])!='\0';i++) 
       if(c==' ')  word=0; 
       else if(word==0) 
       {   word=1;  num++;   } 
    printf("There are %d words ",num); 
}

调试的结果:
在这里插入图片描述

算法图解如下:
在这里插入图片描述
------》输入一行字符,统计其中有多少个单词 的问题到此解决了《------

升级问题如下:
问题2:有三个字符串,找出其中最大者
例如
在这里插入图片描述
搞清楚字符串的比较逻辑是什么?【问题是什么?问题的解决逻辑是什么?代码实现。】
字符串的比较逻辑:
当s1<s2时,返回为负数;
当s1=s2时,返回值= 0;
当s1>s2时,返回正数。
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。如:

/*
其中A=65,a=97
1."A"<"B" 
2."A"<"AB" 
3."Apple"<"Banana" 
4."A"<"a" 
5."compare"<"computer"
*/

搞清楚字符串的比较逻辑之后,那么how hello hinihao 这三个字符串大小的关系是:
how > hinihao > hello
所以输出最大的字符串就是输出how.
完整代码如下:

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

int main()
{

	char str[3][20],  // 定义二维字符数组
         string[20];  // 定义一维字符数组,作为交换字符串时的临时字符数组
	int i;

	for(i=0;i<3;i++)
		gets(str[i]);
		
	if (strcmp(str[0], str[1])>0) {strcpy(string, str[0]);}
	else {strcpy(string,str[1]);}
	
    if(strcmp(str[2],string)>0) {strcpy(string,str[2]);}
    else {strcpy(string,string);}

    printf("The largest string is:%s\n", string);

    return 0;
}

输入:
how
hello
hinihao
代码应该执行输出:
how
截图:
在这里插入图片描述
------》搞定 问题2:有三个字符串,找出其中最大者 的问题到此解决了《------

秘籍思维:
编程就是解决问题。
解决问题就是找解决逻辑。
最终将逻辑转化为代码实现。【c语言代码,python代码,go代码】

©️2022 CSDN 皮肤主题:我行我“速” 设计师:Amelia_0503 返回首页

打赏作者

代码写注释

请赞赏我

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值