我有这样一个文件:
FirstName, FamilyName, Address, PhoneNumber
Run Code Online (Sandbox Code Playgroud)
我如何按FamilyName对其进行排序?
我有一些代码可以从pdf文件中读取.有没有办法在Windows上使用Pypdf,Python 2.6在pdf文件(而不是页面)中逐行读取?
以下是阅读pdf页面的代码:
import pyPdf
def getPDFContent(path):
content = ""
num_pages = 10
p = file(path, "rb")
pdf = pyPdf.PdfFileReader(p)
for i in range(0, num_pages):
content += pdf.getPage(i).extractText() + "\n"
content = " ".join(content.replace(u"\xa0", " ").strip().split())
return content
Run Code Online (Sandbox Code Playgroud)
更新:
通话代码是这样的:
f= open('test.txt','w')
pdfl = getPDFContent("test.pdf").encode("ascii", "ignore")
f.write(pdfl)
f.close()
Run Code Online (Sandbox Code Playgroud) "自恋数字"是n位数字,其数字的所有n次方的总和等于数字.
所以,这153是一个自恋的数字,因为1^3 + 5^3 + 3^3 = 153.
现在给定N,找到N个数字长度的所有自恋数字?
我的方法:迭代所有数字做数字的幂和
并检查是否有相同的数字,我计算了权力.
但这还不够好,有没有更快的方法?!
更新: 在自然界中只有88个自恋数字,最大的是39位数字,但我只需要长度为12或更短的数字.
我的代码:
long long int powers[11][12];
// powers[x][y] is x^y. and its already calculated
bool isNarcissistic(long long int x,int n){
long long int r = x;
long long int sum = 0;
for(int i=0; i<n ; ++i){
sum += powers[x%10][n];
if(sum > r)
return false;
x /= 10;
}
return (sum == r);
}
void find(int n,vector<long long int> &vv){
long long …Run Code Online (Sandbox Code Playgroud) 我的方法:
每个元素的固定长度(假设为20)数组是指向链表的第一个节点的指针.所以我有20个不同的链表.
这是结构:
struct node{
char data[16];
struct node *next;
};
Run Code Online (Sandbox Code Playgroud)
我对该数组的声明
struct node *nodesArr[20];
Run Code Online (Sandbox Code Playgroud)
现在要将一个新节点添加到链接列表之一,我这样做:
struct node *temp;
temp = nodesArr[i]; // i is declared and its less than 20
addNode(temp,word); // word is declared (char *word) and has a value ("hello")
Run Code Online (Sandbox Code Playgroud)
addNode函数:
void addNode(struct node *q, char *d){
if(q == NULL)
q = malloc(sizeof(struct node));
else{
while(q->next != NULL)
q = q->next;
q->next = malloc(sizeof(struct node));
q = q->next;
}
q->data = d; // this must done using …Run Code Online (Sandbox Code Playgroud) 是否有一个与raw_inputPython 相同的C函数?
#in Python::
x = raw_input("Message Here:")
Run Code Online (Sandbox Code Playgroud)
我怎么能在C中写出类似的东西?
更新::
我做了这个,但我得到一个错误::
#include<stdio.h>
#include<string.h>
#include "stdlib.h"
typedef char * string;
int raw_input(string msg);
string s;
string *d;
main(){
raw_input("Hello, Enter Your Name: ");
d = &s;
printf("Your Name Is: %s", s);
}
int raw_input(string msg){
string name;
printf("%s", msg);
scanf("%s", &name);
*d = name;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
并且错误是程序运行并打印msg,并通过scanf获取用户类型,但然后它挂起并退出.. ??
我正在尝试从字符串text中找到子字符串,该字符串是字符串的字谜pattern.
我的问题: 请问拉宾,卡普算法进行调整,以这个目的是什么?还是有更好的算法?
我尝试过一种蛮力算法,在我的情况下不起作用,因为文本和模式每个都可以达到一百万个字符.
更新:我听说有一种使用O(1)空间的最坏情况O(n 2)算法.有谁知道这个算法是什么?
更新2:作为参考,这里是Rabin-Karp算法的伪代码:
function RabinKarp(string s[1..n], string sub[1..m])
hsub := hash(sub[1..m]); hs := hash(s[1..m])
for i from 1 to n-m+1
if hs = hsub
if s[i..i+m-1] = sub
return i
hs := hash(s[i+1..i+m])
return not found
Run Code Online (Sandbox Code Playgroud)
这使用滚动散列函数来允许在O(1)中计算新散列,因此在最坏的情况下整体搜索是O(nm),但是在最好的情况下具有良好的散列函数是O(m + n) .few collisions在搜索字符串的字谜时会产生滚动哈希函数吗?
我正在制作一个服务器,它创建一个tcp套接字并在端口范围内工作,每个端口它将在该端口上监听一段时间,然后继续其余的代码.
像这样::
import socket
sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sck.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
msg =''
ports = [x for x in xrange(4000)]
while True:
try:
for i in ports:
sck.bind(('',i))
## sck.listen(1)
## make it just for some time and then continue this
## if there a connection do this
conn, addr = sck.accept()
msg = conn.recv(2048)
## do something
##if no connection continue the for loop
conn.close()
except KeyboardInterrupt:
exit()
Run Code Online (Sandbox Code Playgroud)
所以我怎么能让sck.listen(1)工作一段时间?
在最新的IEEE Xtreme竞赛中,我试图解决的一个问题是,
输入两点p1(x1,y1),p2(x2,y2)你必须找到从p1到p2的最短路径长度,
例如,如果p1(1,1),p2(4,4)那么最短路径的长度为9个边缘,

我做过像深度优先搜索这样的东西,如果两点之间的距离很小,那么效果很好,例如对于点(1,1)和(10,10)需要很长时间,
并且最大点的点数有限(12,12).
我的方法是将上面的图片转换为所有权重为1的无向图,然后找到最短路径.
这是我找到最短路径的函数:
int minCost;
vector<int> path;
multimap<int,int> Connections;
typedef multimap<int,int>::iterator mmit;
void shortestPath(int cs){
if(cs > minCost)
return;
if(path.back() == Target){
if(cs < minCost)
minCost = cs;
return;
}
pair<mmit,mmit> it = Connections.equal_range(path.back());
mmit mit = it.first;
for( ; mit != it.second ; ++mit){
if(isVisited(mit->second))
continue;
markVisited(mit->second);
path.push_back(mit->second);
shortestPath(cs+1);
markUnvisited(mit->second);
path.pop_back();
}
}
Run Code Online (Sandbox Code Playgroud)
有没有比这更快的方法?我可以使用dijkstra这个无向图吗?
f = open('wl4.txt', 'w')
hh = 0
######################################
for n in range(1,5):
for l in range(33,127):
if n==1:
b = chr(l) + '\n'
f.write(b)
hh += 1
elif n==2:
for s0 in range(33, 127):
b = chr(l) + chr(s0) + '\n'
f.write(b)
hh += 1
elif n==3:
for s0 in range(33, 127):
for s1 in range(33, 127):
b = chr(l) + chr(s0) + chr(s1) + '\n'
f.write(b)
hh += 1
elif n==4:
for s0 in range(33, 127):
for s1 in …Run Code Online (Sandbox Code Playgroud) 我制作这个节目::
#include<stdio.h>
char *raw_input(char *msg);
main() {
char *s;
*s = *raw_input("Message Here Is: ");
printf("Return Done..");
printf(s);
}
char *raw_input(char *msg){
char *d;
printf("%s", msg);
scanf("%s",&d);
return d;
}
Run Code Online (Sandbox Code Playgroud)
这样做,它打印我的消息并扫描用户的输入,然后打印它,但是打印输出来自用户的问题是什么?
更新::
我需要raw_input函数.没有任何额外的呼叫就像这样
*s = *raw_input("Message Here");
Run Code Online (Sandbox Code Playgroud)
我不想用这个::
raw_input("Message Here Is: ", d);
....
Run Code Online (Sandbox Code Playgroud)
只想返回用户将输入的字符串.
UPDATE2 ::
来自jamesdlin回答(谢谢),现在我明白了我的问题是如何在这里返回一个分配的字符串:)
#include<stdio.h>
#define buffer 128
char *raw_input(char *msg);
main() {
char *s;
s = raw_input("Message Here Is: ");
printf("%s\n",s);
}
char *raw_input(char *msg){
char *d;
printf("%s", msg);
fflush(stdout);
fgets(d, buffer, stdin); ## In …Run Code Online (Sandbox Code Playgroud)