找出一串字符串的单词,存在二维数组中,并求其中最长的一个。
字符串在main函数中输入。长单词在main函数中输出。
代码修改如下,将字符串存入二维数组s2中,并在主函数中输出各个字符串以及最长字符串:
#include<stdio.h>
int longest(char s[], char t[],char temp[][30])
{
//定义临时字符数组用于存放单词
int len, i = 0, j = 0,k=0,count,flag=0,num;
len = strlen(s);
//1en用于计算数组长度
for (i = 0; i < len; i++)
{
j = 0;
count = 0;
for (; s[i] >= 'a' && s[i] <= 'z' || s[i] >= 'A' && s[i] <= 'Z'; i++, j++)
{
temp[k][j] = s[i]; //将 每个单词临时储存在templ1中
count++; //每个单词计算有几个字母
}
if (count > flag) //flag为最大单词长度
{
flag = count;
num = k; //num记录最大单词在二维数组中的位置
}
temp[k][j] = '\0';
k++;
}
strcpy(t, temp[num]);
return k - 1;
}
int main()
{
char s[100], word[30], s2[30][30]; //s接受输入字符串,word装最长单词,s2将单词存储在二维数组
int n; //单词个数
printf("请输入一行字符: ");
gets(s);//读入字符串到s
n=longest(s, word,s2);//调用函数,传字符串s和空字符数组word
for (int i = 0; i < n; i++)
{
printf("第%d个单词是: ",i);
puts(s2[i]);
}
printf("最长的单词是: ");
puts(word);
}
实例输入输出:
代码发一下,给你改改
试试这样,main里改成下面的这样
#include<stdio.h>
int main()
{
char s[100][100],word[30];
int n;
printf("输入n:");
scanf("%d",&n);
printf("输入n行字符串\n");
getchar();
int i;
for(i=0; i<n; i++)
{
gets(s[i]);
longest(s[i],word);
printf("最长单词:");
puts(word);
}
return 0;
}
你是要解释这段代码嘛?我给你解释一下这段代码的逻辑吧,首先他定义了一个数组进行存取字符,在for循环中,如果字符是英文字符,就进入数组,遇到空格就跳出循环,然后利用格式符分段,表示了一个单词,然后一直循环下去,就可以得到所有的单词,然后进行对比,就可以了
没有用二维数组,单词用26个英文大小写之外的字符分割
memcpy或 strncpy将 string的字节复制到 array[0]