输入一段英文,从中找出最长的英文单词。英文单词由空格分隔。(用字符指针实现,且不能调用库函数。)注:英文单词只包含大写字母和小写字母;若最长的英文单词有多个,则输出第一个。
#include <stdio.h>
char* findLongestWord(char* sentence) {
char* longestWord = NULL;
int maxWordLength = 0;
int wordLength = 0;
while (*sentence != '\0') {
if (*sentence != ' ') {
wordLength++;
if (wordLength > maxWordLength) {
maxWordLength = wordLength;
longestWord = sentence - wordLength + 1;
}
} else {
wordLength = 0;
}
sentence++;
}
return longestWord;
}
int main() {
char input[100];
printf("请输入一段英文:\n");
fgets(input, 100, stdin);
// 移除输入中的换行符
for (int i = 0; input[i] != '\0'; i++) {
if (input[i] == '\n') {
input[i] = '\0';
break;
}
}
char* longestWord = findLongestWord(input);
if (longestWord != NULL) {
printf("最长的英文单词是:%s", longestWord);
} else {
printf("输入无效或无英文单词。\n");
}
return 0;
}
供参考:
#include <stdio.h>
int main()
{
char str[80], * pstr;
int i = 0, flg = 0, maxlen = 0, strlen = 0;
printf("Please input a string:\n");
gets(str);
while (str[i] != '\0') {
if (str[i] != ' ') {
if (!flg)
strlen = 0;
flg = 1;
strlen++;
}
else {
if (flg && strlen > maxlen) {
maxlen = strlen;
pstr = str + i - strlen;
*(pstr + strlen) = '\0';
}
flg = 0;
}
i++;
}
if (flg && strlen > maxlen) {
maxlen = strlen;
pstr = str + i - strlen;
*(pstr + strlen) = '\0';
}
printf("最长单词:%s %d", pstr, maxlen);
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:1200000有多少个约数?(只计算正约数)
**【答案提交】**这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
这是一个字符串处理的问题,在C语言中需要注意几点,先用fgets
将输入的字符存入字符数组中,然后再用循坏、字符串处理函数找出其中最长的单词。
代码如下:
#include <stdio.h>
#include <string.h>
void longest_word(char *str) {
int max_len = 0, len = 0, i = 0, start = 0;
char *p;
while (str[i] != '\0') {
// 如果不是字母则重置单词开始位置
if (str[i] == ' ' || str[i] == '\n') {
len = 0;
start = i+1;
i++;
continue;
}
len++;
if (len > max_len) {
max_len = len;
p = &str[start];
}
i++;
}
// 将找到的单词输出
for (i = 0; i < max_len; i++) {
printf("%c", p[i]);
}
printf("\n");
}
int main() {
char str[100];
printf("请输入若干英文单词(每行一个,以#作为结束标记):\n");
// 读入若干单词,以#作为结束标志
while (fgets(str, 100, stdin) != NULL) {
if (str[0] == '#') break;
longest_word(str);
}
return 0;
}
思路解析:
首先输入若干单词,以#作为结束标志,可以使用fgets
函数实现。接着在longest_word
函数中定义变量max_len
保存最大单词长度,len
保存当前单词长度,start
保存当前单词开始位置,p
保存最长单词的指针。
接着采用类似双指针的思路,i
从0
开始,如果遇到非字母字符(例如空格、回车),更新len
和start
的值,继续循环;如果遇到字母,则len
加1,如果len
大于max_len
,则更新p
的指向。当i
循环结束后,p
恰好指向最长的单词的第一个字母,这时只需要输出这个单词即可。
需要注意的是,输入单词时使用fgets
函数,这样可以处理遇到空格的情况。输出时使用一个循环输出单词中的每一个字符,同时还要注意输出完单词后要换行。
参考链接:C语言实现求最长单词