IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> POJ 2503 -> 正文阅读

[C++知识库]POJ 2503

2503

在这里插入图片描述

解决方法一:

用 map容器,一对一的映射过去。

要点二、需要注意输入的问题,这里有一行空行怎么保留,getline(cin, line); 这里读入line之后,就可以发现如果是空行,则line =""

对输入的字符串进行截取。

#include<iostream>
#include <map>
#include <iostream>
#include <cstdio>
#include <string>
#include <map>
using namespace std;
int main()
{
    map<string, string> dict;
    string line = "", value = "", key = "";
    int v_pos = 0, k_pos = 0;
    while (1)
    {
        getline(cin, line);
        if (line == "")
            break;
        v_pos = line.find(' ');  //查找第一个空格位置
        value = line.substr(0, v_pos); //取子串
        k_pos = line.rfind(' '); //找最后一个空格位置
        key = line.substr(v_pos + 1, k_pos - v_pos - 1); //取子串
        dict.insert(pair<string, string>(key, value));
    }
    char query[100];
    while (~scanf("%s", query))
    {
        if (dict.find(query) != dict.end())
            cout << dict[query] << endl;
        else
            cout << "eh" << endl;
    }
    return 0;
}

方法二、用二分查找和qsort解决

这里对字符串进行比较。
按字典序排序。
这样可以进行二分查找。

//按字典序排序 
int cmp_chars(const void* e1, const void* e2)
{
	return strcmp(*(char**)e1, *(char**)e2);
}
void test2()
{
	 char* arr1 = "bc";
	 char* arr2 = "ad";
	 char* arr3 = "ac";
	 char* p[3] = { arr1,arr2,arr3 };
	int sz = sizeof(p) / sizeof(p[0]);
	qsort(p, sz, sizeof(p[0]), cmp_chars);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%s\n", p[i]);
	}
}
题解:

#include <iostream>
# include <stdio.h>
#include<string.h>
#include<stdlib.h> 
const int MAX = 100001;
typedef struct
{
	char e[11];
	char f[11];
}Entry;
Entry entry[MAX];
int i = 0;		//词典总条数

int cmp(const void* a, const void* b)
{
	return strcmp((*(Entry*)a).f, (*(Entry*)b).f);
}
int BinSearch(char c[])
{
	int low = 0, high = i - 1;
	int mid, t;
	while (low <= high)
	{
		mid = (low + high) / 2;
		t = strcmp(entry[mid].f, c);  //字符匹配 和map的find功能一样。 
		if (t == 0)
			return mid; 
		else if (t == -1)  //小了
			low = mid + 1;
		else
			high = mid - 1;
	}
	return -1;
}

int main()
{
	char str[25];
	int index = -1;
	while (gets(str))
	{
		if (str[0] == '\0')
			break;
		sscanf(str, "%s%s", entry[i].e, entry[i].f);
		i++;
	}
	qsort(entry, i, sizeof(Entry), cmp);
	while (gets(str))
	{
		index = BinSearch(str);
		if (index == -1)
			printf("eh\n");
		else
			printf("%s\n", entry[index].e);
	}
	
	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:30:29  更:2022-03-21 20:33:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:46:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码