C语言:编写一个函数实现在一个字符串中查找最长的单词的位置

#include<stdio.h>#include<windows.h>#defineN100intmain(){intstring_site(charstr[]);ch... # include<stdio.h>
# include<windows.h>
# define N 100
int main()
{
int string_site(char str[]);
char str[N];
printf("请输入一个字符串:");
gets(str);
string_site(str);
system("pause");
return 0;
}
int string_site(char str[])
{
int num_of_let;
char ab[2][N];
int n=0;
int i,j,flag=0,num_of_word=0;
for(i=0;i<N;i++)
{
if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z')
{
num_of_let++;
}
if(str[i]==' ')
{
flag=0;
}
else if(flag==0)
{
flag=1; /*flag=1,找到一个单词*/
ab[n][0]=n+1; /*第n+1行 第0列存放找到的单词序号*/
ab[n][1]=num_of_let; /* 第n+1行 第1行存放字母个数*/
num_of_let=0;
n++;
num_of_word++;
}
}
printf("%d\n",num_of_word);
printf("%d %d",ab[0][1]);
}
我想用一个二维数组存放找到的单词的该单词的字母个数,最后再对二维数组进行排列,找到最长的单词的位置(即在第几个单词)。
代码还没写完,我试着输出了一下二维数组的结果,结果是错的。。
17行改为char ab[N][2];
展开
 我来答
xoaxa
推荐于2016-01-06 · TA获得超过8608个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3430万
展开全部
#include <stdio.h>
#include <string.h>
  
int main() {
    char line[100];
    int alphabetic(char),i;
    int longest(char[]);
    printf("input a line:\n");
    gets(line);
    for(i = longest(line);alphabetic(line[i]);i++)
        printf("%c",line[i]);
    printf("\n");
    return 0;
}
  
int alphabetic(char x) {
    if('a' <= x && x <= 'z' || 'A' <= x && x >= 'Z') return 1;
    return 0;
}
  
int longest(char str[]) {
    int i = 0,len = 0,maxlen = 0,index,start;
    while(str[i]) {
        while(str[i] && !alphabetic(str[i])) ++i; // 过滤掉非英文字符
        len = 0;
        index = i;
        while(str[i] && alphabetic(str[i])) { // 统计单词的字符个数
            ++len;
            ++i;
        }
        if(len > maxlen) {
            maxlen = len;
            start = index;
        }
    }
    return start;
}
Sesigea
2013-04-21
知道答主
回答量:4
采纳率:0%
帮助的人:5.2万
展开全部
虽然我不是用C的但是我把我看完题目的思路跟你讨论一下吧...

初始化最大字数max为0, 单词数i=0

开始读入, 如果单词与单词之间是用空格隔开的话那么就是读入单词, 计字数n, 确定单词位置i=i+1. 读到空格, 停止.

如果字数n>max, 记录你要的信息, 比如单词位置/单词内容.

最长单词位置P = n>max时候所读入的单词的序号i

否则无视掉继续读.

读到文件末端/指定词数, 跳出循环. 输出结果

总体而言感觉没必要把所有信息都保存下来, 我只需要留住题目要求的最大字符串的位置就可以了.
追问
开始读入, 如果单词与单词之间是用空格隔开的话那么就是读入单词, 计字数n, 确定单词位置i=i+1. 读到空格, 停止. 

这部分的代码可以写来看看吗?
追答
因为语言不同我觉得可能会在理解上有差漏.
用while型循环, 按字符类型读入, 如果是字母的话, 插在字符串末端, 如果是空格, 计算字符串长度n, 确定位置i=i+1, 清空字符串, 继续读入.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式