0
点赞
收藏
分享

微信扫一扫

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


问题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;
}

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

可以看到:

示例

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);
}

调试的结果:

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

算法图解如下:

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

------》输入一行字符,统计其中有多少个单词 的问题到此解决了《------

升级问题如下:

问题2:有三个字符串,找出其中最大者

例如

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

搞清楚字符串的比较逻辑是什么?【问题是什么?问题的解决逻辑是什么?代码实现。】

字符串的比较逻辑:

当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

截图:

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

------》搞定 问题2:有三个字符串,找出其中最大者 的问题到此解决了《------

秘籍思维:

编程就是解决问题。

解决问题就是找解决逻辑。

最终将逻辑转化为代码实现。【c语言代码,python代码,go代码】



举报

相关推荐

0 条评论