字符串\单词本管理

简介: 字符串\单词本管理

1.头文件和函数声明

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
#define SIZE 100    //最多可存储单词数
 
//函数声明
int addword(char p[][20], int n);   //插入单词的指针,单词个数——返回单词个数
int findword(char p[][20], int n, char* f);   //指针,单词个数,待查找的单词——返回位置
int delword(char p[][20], int n, char* f);    //指针,单词个数,待查找的单词——返回单词个数
void display(char p[][20], int n);    //指针,单词个数
void menu();

2.主函数

int main()
{
  //初始化
  char myword[100][20]; //个数100,限长20
  char searchword[20];
  char choice;
  int count = 0;    //单词个数
  int pos = -1;   //单词存在状态
 
  //输入
  do
  {
    menu();
    printf("请输入你的选择:");
    scanf("%c", &choice);
    getchar();  //吞掉空格符
    switch (choice)
    {
    case '1':
      count = addword(myword, count);
      break;
    case '2':
      printf("请输入您想查找的单词:");
      gets(searchword);
      pos = findword(myword, count, searchword);    //查找该单词在单词本中的位置
      if (pos != -1)
        printf("这是第%d个单词~\n",pos+1);
      else
        printf("该单词不存在,请确认是否添加\n");
      break;
    case '3':
      printf("你想删除哪个单词?\n");
      printf("请输入:");
      gets(searchword);   //经过测试,在gets()里不需要getchar()去吞掉回车【在strcmp里无影响】
      count = delword(myword, count, searchword);
      break;
    case '4':
      display(myword,count);
      break;
    case '0':
      choice = 0;
      break;
    default:
      printf("ERROEINPUT#TRYAGAIN#\n");
      break;
    }
  } while (choice);
 
  system("pause");
  return 0;
}

3.函数定义

a.findword
int findword(char p[][20], int n, char* f)
{
  int i;
  int pos = -1;
  for (i = 0; i < n; i++)
  {
    if (!strcmp(p[i], f))
    {
      pos = i;
      break;
    }
  }
  return pos;
}
b.addword
int addword(char p[][20], int n)  
{
  //初始化
  int i, j;
  int pos = -1;
  char flag = 'y';
  char tmp[20]; //临时单词区
 
  //判断单词是否存在并插入
  while (flag=='y' || flag=='Y')
  {
    if (n == SIZE)
    {
      printf("单词本已满,请及时清理或升级为VIP(暂未拓展该业务\n)");
      break;
    }
    else
    {
      printf("请输入想添加的单词:");
      gets(tmp);
      pos = findword(p, n, tmp);
      if (pos != -1)
      {
        printf("单词就在你的本子#");
        break;
      }
      else    //如果已经存在单词,排序;否则第一个就是它
      {
        if (n)
        {
          for (i = 0; i < n && strcmp(tmp, p[i])>0; i++)
            ;
          for (j = n; j > i; j--)   //倒着改会减少很多麻烦
            strcpy(p[j], p[j - 1]);
          strcpy(p[i], tmp);    //记得加上单词,最后会返回
          n++;
        }
        else
        {
          strcpy(p[0], tmp);
          n = 1;      //记得加上单词,最后会返回
        }
      }
      printf("再加一个?(y/n)\n");
      scanf("%c", &flag);
      getchar();
      //判断一下
      while (flag != 'y' && flag != 'Y' && flag != 'N' && flag != 'n')
      {
        printf("###ERROR###\n");
        printf("###请重新输入###\n");
        printf("再加一个?(y/n)\n");
        scanf("%c", &flag);
        getchar();
      }
    }
  }
  return n;
}
c.delword
int delword(char p[][20], int n, char* f)
{
  int i;
  int pos = -1;
  pos = findword(p,n,f);
  if (pos == -1)
    printf("单词不存在...\n");
  else
  {
    for (i = pos; i < n - 1;i++)  //直接覆盖
      strcpy(p[i], p[i + 1]);
    n -= 1;
    printf("删除成功\n");
  }
  return n;
}
d.display
void display(char p[][20], int n)
{
  int i;
  if (n)
  {
    for (i = 0; i < n; i++)
      puts(p[i]);
  }
  else
    printf("没词,快去添加#\n");
}
e.menu
void menu()
{
  printf("\t------------1.增加单词---------\n");
  printf("\t------------2.查询单词---------\n");
  printf("\t------------3.删除单词---------\n");
  printf("\t------------4.显示单词---------\n");
  printf("\t------------0.退出-------------\n");
}


目录
相关文章
|
1月前
删除字符串中的除字母外的字符
【10月更文挑战第31天】删除字符串中的除字母外的字符。
39 4
|
7月前
|
C语言
【汇编语言实战】给定一个句子,将大写字母变为小写
【汇编语言实战】给定一个句子,将大写字母变为小写
81 1
|
6月前
|
C++ 安全
高效遍历:C++中分隔字符串单词的3种方法详解与实例
拷贝并交换(Copy-and-Swap)是C++中实现赋值操作符和异常安全拷贝构造函数的技巧。它涉及创建临时对象,使用拷贝构造函数,然后交换数据以确保安全。C++11之前的策略在此后及C++11引入的移动语义和右值引用下仍有效,但后者提供了更高效的实现方式。
|
Python
python字符串切分连接(输入一个包含多个单词的英文句子,单词间以空格分隔,标点符号后跟一个空格。定义一个函数,功能是用指定的符号把单词连接起来。)
python字符串切分连接(输入一个包含多个单词的英文句子,单词间以空格分隔,标点符号后跟一个空格。定义一个函数,功能是用指定的符号把单词连接起来。)
1097 0
|
SQL 前端开发 Java
【SQL开发实战技巧】系列(十二):三问(如何对字符串字母去重后按字母顺序排列字符串?如何识别哪些字符串中包含数字?如何将分隔数据转换为多值IN列表?)
如何将分隔数据转换为多值IN列表、如何按字母顺序排列字符串、如何对字符串字母去重后按字母顺序排列字符串、如何删除字符串中的字符保留数字。【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。这篇文章还是介绍的字符串处理案例,还是那句话,这些操作太太太常见了。后面还会写,而且是更麻烦更难的需求。
【SQL开发实战技巧】系列(十二):三问(如何对字符串字母去重后按字母顺序排列字符串?如何识别哪些字符串中包含数字?如何将分隔数据转换为多值IN列表?)
|
算法 Java 索引
【算法】给定一个字符串 s 和一些长度相同的单词 words,串联所有单词的子串。要不要来试一试?
给定一个字符串 s 和一些长度相同的单词 words串联所有单词的子串
156 0
【算法】给定一个字符串 s 和一些长度相同的单词 words,串联所有单词的子串。要不要来试一试?
判断字符串首个字母是否大写,若大写,则输出该字符串中大写字母的个数 并打印。
判断字符串首个字母是否大写,若大写,则输出该字符串中大写字母的个数 并打印。
169 0
|
存储 算法
算法:编程在一个已知的字符串中查找最长单词,假定字符串中只包含字母和空格,空格用来分隔不同单词
算法:编程在一个已知的字符串中查找最长单词,假定字符串中只包含字母和空格,空格用来分隔不同单词
在一个小写英文字母(a-z)组成的字符串的最短子串,其包含这个字符串中出现过的所有字母,输出最左边的该类子串
在一个小写英文字母(a-z)组成的字符串的最短子串,其包含这个字符串中出现过的所有字母,输出最左边的该类子串
113 0
LeetCode 524. 通过删除字母匹配到字典里最长单词
LeetCode 524. 通过删除字母匹配到字典里最长单词
77 0