📄 有关单词问题的处理方法.txt
字号:
/*要求很简单, 用英文输入随意一段话,或者一句话,或者一编文章,
只需要把每个单词的第一个字母跟最后一个字母掉转后输出,最后输出打的单字用了多少行。
最后用户可以选择退出或者重新输入。
例如: We are now really, really having fun with computers!
输出: Ew era won yeallr, yeallr gavinh unf hitw somputerc!
This paragraph is used 1 line!
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXLINES 100 //最多一百行
#define MAXWORDS 10000 //最多一千个单词
int get_lines(char *lines[]);//此函数用来输入英文,并判断它的行数
int get_words(char *words[], char *lines[], int n);//此函数用来存储单个的单词,空格和符号
void change_words(char *words[], int n);//此函数用来掉转单词的初,末字母
void print(char *a[], int n); //此函数用来输出单词
int main(void)
{
char *lines[MAXLINES];//该数组用来存储每一行的内容
char *words[MAXWORDS];//该数组用来存储单个的单词,空格和符号
int number_of_lines, number_of_words;//此二变量分别存储总行数和单个的单词,空格和符号的总数
int flag;
do{
puts("用英文输入随意一段话,输入1表示开始,输入0表示离开:");
scanf("%d", &flag);
fflush(stdin);
if(flag == 1)
{
number_of_lines = get_lines(lines);//输入英文,并返回它的行数
if(number_of_lines < 0)
{
puts("Memory allocation error");
return 1;
}
/*把每一行的单词,空格和符号分别存储起来*/
number_of_words = get_words(words, lines, number_of_lines);
if(number_of_words < 0)
{
puts("Memory allocation error");
return 1;
}
print(words, number_of_words);//输出未掉转前的单词
change_words(words, number_of_words);//掉转单词的初,末字母 ,并输出掉转后的单词
/*输出打的单字用了多少行*/
printf("\nThis paragraph is used %d line!\n", number_of_lines);
}
} while(flag != 0);
getchar();
return 0;
}
int get_lines(char *lines[])
{
int n=0;
char buffer[80];//先把每一行的内容存储在数组buffer[80]中
puts("Enter the article at time; enter a blank when done.");
while((n<MAXLINES)&&(gets(buffer)!=0)&&(buffer[0]!='\0'))
{
if((lines[n] = (char*)malloc(strlen(buffer)+1))==NULL)
return -1; //给lines[n],并把buffer[80]的内容复制给lines[n]
strcpy(lines[n++], buffer);
}
return n;//返回文章的行数
}
int get_words(char *words[], char *lines[], int n)
{
int i, j, k=0;
char str1[30], str2[2];
for(i=0; i<n; i++)
{
j = 0;
str1[0] = '\0';
while(lines[i][j]!='\0')
{
if(((lines[i][j]>='A')&&(lines[i][j]<='Z')||(lines[i][j]>='a')&&(lines[i][j]<='z'))
&&((lines[i][j+1]>='A')&&(lines[i][j+1]<='Z')||(lines[i][j+1]>='a')&&(lines[i][j+1]<='z')))
{ //如果该字符和它的下一个字符都是字母,则将其存入数组str1,但不必急着把str1复制给words[k]
str2[0] = lines[i][j];
strcat(str1, str2);
j++;
}
else if(((lines[i][j]>='A')&&(lines[i][j]<='Z')||(lines[i][j]>='a')&&(lines[i][j]<='z'))
&& !((lines[i][j+1]>='A')&&(lines[i][j+1]<='Z')||(lines[i][j+1]>='a')&&(lines[i][j+1]<='z')))
{ //如果该字符是字母,但它的下一个字符不是字母,则将其存入数组str1,并把str1复制给words[k]
str2[0] = lines[i][j];
strcat(str1, str2);
if((words[k] = (char*)malloc(strlen(str1)+1))==NULL)
return -1;
strcpy(words[k++], str1);
j++;
str1[0] = '\0';
}
else
{ //如果该字符不是是字母,则将其存入数组str1,并把str1复制给words[k]
str2[0] = lines[i][j];
strcat(str1, str2);
if((words[k] = (char*)malloc(strlen(str1)+1))==NULL)
return -1;
strcpy(words[k++], str1);
j++;
str1[0] = '\0';
}
} //把换行符复制给words[k]
str2[0] = '\n';
strcat(str1, str2);
if((words[k] = (char*)malloc(strlen(str1)+1))==NULL)
return -1;
strcpy(words[k++], str1);
}
return k;
}
void change_words(char *words[], int n)
{
int i, j;
char temp;
for(i=0; i<n; i++)
{
j = 0;
while(words[i][j+1] !='\0')
j++;
if(j != 0) //掉转单词的初,末字母
{
temp = words[i][0];
words[i][0] = words[i][j];
words[i][j] = temp;
}
for(int k=0; k<=j; k++) //输出掉转后的单词
printf("%c", words[i][k]);
}
}
void print(char *a[], int n)
{
int i;
for(i=0; i<n; i++)
printf("%s", a[i]);
printf("\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -