⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 有关单词问题的处理方法.txt

📁 爱因斯坦的思考题 二叉树算法集 分解质因数新解 石子归并问题等有趣的C程序
💻 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 + -