小编ban*_*run的帖子

获取c ++中的数字百分比

如何计算int的百分之几?
例如,我想从数字中得到30%,如果我将使用这个代码示例,我会得到错误的答案:

int number = 250;
int result = (number / 100) * 30;  
Run Code Online (Sandbox Code Playgroud)

结果将是60,真正的答案是75,有没有办法计算它?

c++ integer-division

8
推荐指数
1
解决办法
7万
查看次数

查找非常大的文件的k个最大元素(而k非常大)

假设我们有一个包含数十亿个整数的非常大的文件,我们想找到k这些值的最大元素,

棘手的部分是它k本身也非常大,这意味着我们不能将k元素保留在内存中(例如我们有一个包含100个亿元素的文件,我们希望找到100亿个最大的元素)

我们怎么能这样做O(n)

我的想法:

我们开始读取文件并用另一个保存k最大元素的文件(按递增顺序排序)检查它,如果读取元素大于第二个文件的第一行,我们删除第一行,然后将其插入第二行文件,时间复杂度将是O(NlogK)(如果我们随机访问该文件,否则它将是'O(Nk)'

任何想法这样做O(n),我想如果我们有外部版本Selection algorithm(快速排序中的分区算法)我们将能够做到这一点,O(n)但我无法在任何地方找到它

algorithm large-files

8
推荐指数
2
解决办法
1万
查看次数

c/c++:未找到头文件

一些头文件存在于/src/dir1/(例如:a.hb.hc.h等等)。我的源文件存在于/src/dir2/file.cpp. 我使用了一些存在的头文件,/src/dir1/但在编译过程中出现了类似header file not found.

然后我更改了包含路径,如#include "../src/dir1/a.h",然后错误消失了,file.cpp但我not found/src/dir1. 因为我包含了头文件 say a.h,它a.h包含了一些其他的头文件,这些头文件存在于/src/dir1/(比如说b.hc.h存在于a.h)中。

如何添加头文件 ( a.h)/src/dir2/file.cpp以便它不应该要求修改存在于 中的头文件中的包含路径/src/dir1/

注意:我正在使用scons构建。

c c++ include

8
推荐指数
1
解决办法
5万
查看次数

为什么不能在c ++中将构造函数声明为static?

我最近读完了第一卷.Bruce Eckel在C++中的思考,现在转向将这些知识用于实际应用.

我最近使用静态成员函数并尝试使构造函数静态,编译器对此不满意.我检查了书中的原因但找不到任何原因.

有谁能解释为什么?

PS:在看到一些回复之后,我想提一下,由于我知道C#(和Java)允许构造函数被声明为静态,因此产生了混淆.

c++ oop static constructor

8
推荐指数
1
解决办法
5275
查看次数

asprintf - 何时使用free()?

asprintf

函数asprintf()和vasprintf()是sprintf(3)和vsprintf(3)的类似函数,除了它们分配一个足够大的字符串来保存包括终止空字节的输出,并通过第一个参数返回指向它的指针.应该将此指针传递给free(3)以在不再需要时释放已分配的存储.

这是我的C代码

void function(){
    char *out = NULL;
    int parts[16] = {1,2,05,003};
    asprintf(&out, "%d.%d.%d.%d", parts[0], parts[1], parts[2], parts[3]);
  //  free(out);
}

int main(void){
    function();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当在调试模式下监视该函数时,我看到该变量在从函数返回时已被销毁.为什么我不需要free()上面的代码?

你能告诉我在什么情况下asprintf我需要免费使用吗?

顺便说一句,我有"gcc版本4.7.2(Ubuntu/Linaro 4.7.2-2ubuntu1)"

在此输入图像描述 在此输入图像描述

c free

5
推荐指数
3
解决办法
3937
查看次数

上下文中的错误

有人可以解释我的错误,我有这个课:

class Account
{
private:
    string strLastName;     
    string strFirstName;    
    int nID;              
    int nLines;             
    double lastBill;
public:
    Account(string firstName, string lastName, int id);
    friend string printAccount(string firstName, string lastName, int id, int lines, double lastBill);
}
Run Code Online (Sandbox Code Playgroud)

但是当我打电话给它时:

string reportAccounts() const
{
    string report(printAccountsHeader());
    for(list<Account>::const_iterator i = listOfAccounts.begin(); i != listOfAccounts.end(); ++i)
    {
        report += printAccount(i->strFirstName, i->strLastName, i->nID, i->nLines, i->lastBill);;
    }
        return report;
}
Run Code Online (Sandbox Code Playgroud)

我收到错误within context,有人可以解释原因吗?

c++ oop class

4
推荐指数
1
解决办法
3万
查看次数

在c中,有哪些规则可以控制编译器如何将相同的字符串合并到可执行文件中

我试图找到c和c ++编译器的规则是什么,将字符串放入可执行文件的数据部分,不知道在哪里看.我想知道以下所有地址在c/c ++中是否保证与规范相同:

char * test1 = "hello";
const char * test2 = "hello";
static char * test3 = "hello";
static const char * test4 = "hello";
extern const char * test5; // Defined in another compilation unit as "hello"
extern const char * test6; // Defined in another shared object as "hello"
Run Code Online (Sandbox Code Playgroud)

在Windows上进行测试,它们都是一样的.但是我不知道它们是否适用于所有操作系统.

c compiler-construction

4
推荐指数
1
解决办法
156
查看次数

以32位整数交换字节2和4

我有这个面试问题 -

交换整数序列中的字节2和字节4.整数是4字节宽,即32位

我的方法是使用char *pointer和a temp char来交换字节.为清楚起见,我已经打破了步骤,否则可以考虑字符数组.

unsigned char *b2, *b4, tmpc;
int n = 0xABCD; ///expected output 0xADCB
b2 = &n;   b2++;  
b4 = &n;   b4 +=3;
///swap the values;
tmpc = *b2;
*b2 = *b4;
*b4 = tmpc;
Run Code Online (Sandbox Code Playgroud)

还有其他方法吗?

c bit-manipulation bitwise-operators

3
推荐指数
1
解决办法
2万
查看次数

指向数组的指针,指示不兼容的指针类型警告

我在warning: assignment from incompatible pointer type [enabled by default]编译以下代码时得到:

int main() {
     int (*aptr) [5] = NULL;
     int arr[5] = {1,2,3,4,5};

     aptr = &arr[0];

     printf("aptr = %p\n arr = %p\n", aptr, &arr[0]);
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到了正确的输出:

aptr = 0xbfcc2c64
arr = 0xbfcc2c64
Run Code Online (Sandbox Code Playgroud)

但是为什么我会收到不兼容指针类型的警告?

c pointers

3
推荐指数
1
解决办法
3307
查看次数

使用C关闭系统不起作用

我正在尝试使用system()C语言调用我们可以做的事情.以下是我用来关闭我的机器的代码.它适用于Windows XP,但在Windows 7中启动时无法在我的机器上运行.问题一定是什么?我试过system("shutdown -R Now")openSUSE 11.3,它在那里工作正常.是什么导致这个平台问题在这里?我对system()相关的例程并不熟悉.

#include <stdio.h>
#include <stdlib.h>

int main(void)    
{    
   char ch;    

   printf("Do you want to shutdown your computer now (y/n)\n");    
   scanf("%c",&ch);    

   if (ch == 'y' || ch == 'Y')    
      system("C:\\WINDOWS\\System32\\shutdown -s");    

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c windows shutdown

3
推荐指数
1
解决办法
2343
查看次数