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]; 展开
# 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]; 展开
2个回答
展开全部
#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;
}
展开全部
虽然我不是用C的但是我把我看完题目的思路跟你讨论一下吧...
初始化最大字数max为0, 单词数i=0
开始读入, 如果单词与单词之间是用空格隔开的话那么就是读入单词, 计字数n, 确定单词位置i=i+1. 读到空格, 停止.
如果字数n>max, 记录你要的信息, 比如单词位置/单词内容.
最长单词位置P = n>max时候所读入的单词的序号i
否则无视掉继续读.
读到文件末端/指定词数, 跳出循环. 输出结果
总体而言感觉没必要把所有信息都保存下来, 我只需要留住题目要求的最大字符串的位置就可以了.
初始化最大字数max为0, 单词数i=0
开始读入, 如果单词与单词之间是用空格隔开的话那么就是读入单词, 计字数n, 确定单词位置i=i+1. 读到空格, 停止.
如果字数n>max, 记录你要的信息, 比如单词位置/单词内容.
最长单词位置P = n>max时候所读入的单词的序号i
否则无视掉继续读.
读到文件末端/指定词数, 跳出循环. 输出结果
总体而言感觉没必要把所有信息都保存下来, 我只需要留住题目要求的最大字符串的位置就可以了.
追问
开始读入, 如果单词与单词之间是用空格隔开的话那么就是读入单词, 计字数n, 确定单词位置i=i+1. 读到空格, 停止.
这部分的代码可以写来看看吗?
追答
因为语言不同我觉得可能会在理解上有差漏.
用while型循环, 按字符类型读入, 如果是字母的话, 插在字符串末端, 如果是空格, 计算字符串长度n, 确定位置i=i+1, 清空字符串, 继续读入.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询