#include <stdio.h>
#include<string.h>
int main(int argc, const char * argv[])
{
//让用户输入一段英文,
printf("请输入一段英文:\n");
char chr[50]={'a'};
fgets(chr, 50, stdin);
//用fgets时,默认\0前面为\n所以为了方便后面判断,可以将这个\n改为' '空格,
if (chr[strlen(chr)-1]=='\n')
{
chr[strlen(chr)-1]=' ';
}
//声明一个二维字符数组用来保存字符单词
char ch[10][20]={'a'};
//声明一个数组用来保存/n的位置
int num[10] ={0};
//这里的思路是:让num[0]=0,方便下一步,将英文段中的空格下标全部找出来给整形数组赋值,通过空格的下标来将英文段的每个字母赋值给字符二维数组;
int j = 0;
for (int i = 0; i < 50; i++)
{
if (chr[i]==' ')
{
num[++j]=i;
}
}
//将一段英文中的内容赋值到二维数组中
for (int i = 1; i <= 10; i++)
{
int k = 0;//定义一个变量,每次让k从0开始
for (int j = num[i-1]; j <num[i]; j++)//通过整形数组中的值,来判断每个英文单词的长度,将他们赋值给二维数组,j的值来判断英文段的位置,当为空格的时候,就直接略过,不为空格时,才给二维字符数组赋值,用i值表示行坐标,K的值用来表示列坐标,这样就可以将英文段中的每个单词找出来并且保存到数组的每一行,
{
if (chr[j]!=' ')
{
ch[i-1][k++]=chr[j];
}
}
}
//声明一个指针变量用来指向二维数组的第0个元素,找出整个二维数组中的最长
char *t = ch[0];//因为字符数组的地址是常量无法改变,声明一个字符指针,首先指向第0行和其他行的字符串作比较,如果大于第0行就将长的字符串地址赋值给指针变量,输出指针变量就是最长字符串
for (int i = 1; i< 10; i++)
{
if (strlen(t)<strlen(ch[i]))
{
t = ch[i];
}
}
printf("最长单词为:%s\n",t);
//转换为大写的思路就简单了,找到每一行的每一列的第一个元素,将他们减去32,就得到他们大写,再打印出来;
for (int i = 0; i < 10; i++)
{
*ch[i]=*ch[i]-32;
}
//循环输出时,会打印出其他代码,可以选择性的打印
for (int i = 0; i< 10; i++)
{
if (*ch[i]!='\340')
{
printf("%s ",ch[i]);
}
}
printf("\n");
return 0;
}
|
|