C/C++/QT中的字符串

2023-11-08

C语言中的字符串

C语言不存在字符串数据类型,其通过一个以’\0’结尾的字符数组实现;所有字符串都是以\0结尾的,所有以\0结尾的字符数组都可以看作字符串。
字符数组的定义,常见有如下几种形式:
char a[10] ={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘h’,‘i’,‘j’};
在这里插入图片描述
char a[10] ={‘a’,‘b’,‘c’,‘d’,‘e’};
在这里插入图片描述
char c[ ] ={‘C’,‘h’,‘i’,‘n’,‘a’};
在这里插入图片描述
char c[ ] =“China”;
在这里插入图片描述
举例:

char c[5] = "China";  //非法赋值,后面的字符串是6个字符
char c[6] = "China";  //合法,这种赋值方式只能在数组定义并初始化的时候
//不能用赋值语句将一个常量字符串或字符数组赋值给另一个字符数组
str1[ ] = "China"; //非法,只有在字符串定义时合法
str2 = "China"; //非法
str3 = str2; //非法
//字符数组的输出
char str1[ ] = "C++language";
cout<<"String1:"<<str1<<endl;

关于字符数组的几点说明:
1、定义char a[5],则说明,a是个字符数组,在内存中占五个字节空间;如果用a来存储字符串,则最多只能有4个有效字符,必须给\0留个空间;
2、a按字符串来算长度是从a这个地址开始,计数到\0字符,这之间的字符个数是字符串a的长度;一般常用strlen()函数来获取字符串长度;
3、计算a的大小用sizeof命令,sizeof(a)得到的是a在内存中占的字节数;
4、字符串与字符数组不能混为一谈。它们相同在形式上,区别就在,字符串一定有\0结束符,而数组不需要!什么是字符串?就是以双引号引起来的数据才叫字符串。字符数组可以存储字符串;
5、C语言汇总不存在字符串数据类型,其通过一个以’\0’结尾的字符数组实现;;在C++编程中建议使用string替换C字符串;
6、char p = “abc”;是在文字常量区分配了一块内存放"abc",然后在栈上分配一地址给p并指向这块地址;
7、char
p是一个指针,根本没分配内存,他指向的"abc123ABC" 是只读的,不能改变

数组:
数组名代表数组元素的地址;
数组名相当于指向数组第一个元素的指针,即a与&a[0]等价;
数组名a是地址常量,不是变量,不能给a赋值;
a[i]等价于*(pointer+i),等价于pointer[i]

&a是指向数组的指针;&a+1将跨越16个字节;&a相当于管辖范围上升了一级;
a是数组的第一个元素a[0];即a等价于a[0];*a相当于管辖范围下降了一级;

数组三条规律
数组名相当于指向数组第一个元素的指针;
&E相当于把E的管辖范围上升了一个级别;
*E相当于把E的管辖范围下降了一个级别;

C++语言中的字符串

在C++中有两种字符串的概念:
1、string类:
由于string为类,定义时实际上是定义了一个对象,而初始化方式也就决定了调用何种构造函数来进行构造
string a;//定义一个空字符串。 string b=“test string”;//定义一个字符串并初始化为test string。
关于string类的详细使用说明,在其他博文介绍。
2、字符数组:
C++继承了C语言的概念,而在C语言中字符串指的是字符数组,并约定以\0作为结束符
char a[20] = “test string”; //定义一个字符串并初始化为test string;;char *b = “test string”; //与a类似,但这个是直接使用常量字符串的地址,所以字符串b是只读的。

Qt中的字符串

Qt中除了可以使用C/C++中的字符串,还封装了QString类用于操作字符串。
Qt使用printf打印无输出问题
尝试在QT中使用printf打印结果不实时输出,是因为打印结果在缓冲区未被释放,所以无法显示,解决方法:
printf在glibc中默认为行缓冲,遇到以下几种情况会刷新缓冲区,输出内容:
(1)缓冲区填满;
(2)写入的字符中有换行符\n或回车符\r;
(3)调用fflush手动刷新缓冲区;//fflush(stdout);//释放缓冲区
(4)调用scanf要从输入缓冲区中读取数据时,也会将输出缓冲区内的数据刷新。
可使用setbuf(stdout,NULL)关闭行缓冲,或者setbuf(stdout,uBuff)设置新的缓冲区,uBuff为自己指定的缓冲区。也可以使用setvbuf(stdout,NULL,_IOFBF,0);
来改变标准输出为全缓冲。全缓冲与行缓冲的区别在于遇到换行符不刷新缓冲区。

常见字符串转换
[QString转char[]数组]

char name[10];
char* ptr;
QString str = ui->namelineEdit->text();
ptr = str.toLatin1().data();
memcpy(p->name,ptr,10); //就是这一句,必须加,不然只是把指针指向了值,并没有赋值

[char[]数组转QString]

char c[]="12ff";
QString str=QString(QLatin1String(c));

[QString 转换为 char*]

//方法1:
QString  str;
char*  ch;
QByteArray ba = str.toLatin1(); // must
ch=ba.data();
//方法2:
QString  filename;
std::string str = filename.toStdString();
const char* ch = str.c_str();

[char *转为QString]

char *ch="hello!";
QString str(ch);   // Qt5     
QString str = QString::fromUtf8(ch);    //  Qt4

[unsigned char* 转QString]

unsigned char* ch;
std::string str = (char*)ch;
QString sstr = QString::fromStdString(str);

[char[]数组之间赋值]

char *strcpy(char *dst, const char *src);//把 src 所指向的字符串复制到 dest,返回指向最终的目标字符串 dest 的指针
char a[7] = "abcdef";
char b[4] = "ABC";
strcpy(a,b);
printf("%c",a[5]);//输出f
printf("%c",a);//输出ABC\0ef,strcpy碰到\0确实会停止复制,但a中未被覆盖的字符会被保留

[unsigned char转char]

unsigned char szBuf[512] 
reinterpret_cast<char*>(szBuf)

[QString转string]

QString.toStdString();

[string转QString]

QString::fromStdString(string);

C语言str系列库函数

[strcmp]
strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数
函数原型:extern int strcmp(const char *s1,const char *s2);//s1=s2,则返回零;s1<s2,则返回负数;s1>s2,则返回正数。

    char cA[6] = "hello";
    char *cB = "hello";
    int ret = strcmp(cA,cB);//ret=0

[strcpy]
strcpy,即string copy(字符串复制)的缩写,原型声明:char strcpy(char dest, const char *src);
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串,返回指向dest的指针。

    char printInfo[50];
    memset(printInfo, 0x00, 50);
    strcpy(printInfo, "CB532测试打印信息");

[strncpy]
strncpy函数用于将指定长度的字符串复制到字符数组中,函数原型:
char *strncpy(char *dest, const char *src, int n);//表示把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest。

    char src[] = "It's Monday and it's raining";
    char dest[40];
    strncpy(dest,src,10);//dest打印It's Monda?u?(后面乱码)
    strncpy(dest,src,strlen(src)+10);//dest打印It's Monday and it's raining

[memcpy]
void *memcpy(void *dest, const void *src, size_t n);//用来将src地址处的内容拷贝n个字节的数据至目标地址dest指向的内存中去,函数返回指向dest的指针

    char   *s= "Golden Global View";
    char   d[20];
    memcpy(d,s,strlen(s));//d打印Golden Global View

[memset]
void *memset(void *s,int c,size_t n) //将已开辟内存空间 s 的首 n 个字节的值设为值 c(给空间初始化),返回s
//memset函数按字节对内存块进行初始化,所以不能用它将int数组初始化为0和-1之外的其他值(除非该值高字节和低字节相同)

    char szVerBuf0[512+1];
    memset(szVerBuf0,0x00,sizeof(szVerBuf0));

[strlen]
extern unsigned int strlen(char *s);
strlen所作的是一个计数器的工作,它从内存的某个位置开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)。

    char aa[200]="Hello,World!";
    printf("strlen(aa)=%d.\n",strlen(aa));//打印12
    printf("sizeof(aa)=%d.\n",sizeof(aa));//打印200

[strstr]
char *strstr(const char *haystack, const char *needle);//在字符串 haystack 中查找第一次出现字符串 needle 的位置并返回,不包含终止符 ‘\0’,如果未找到则返回 null。

    char haystack[20] = "RUNOOB2";
    char needle[10] = "NOOB";
    char *ret;
    ret = strstr(haystack, needle);
    printf("substr:%s\n", ret);//打印substr:NOOB2

[strcspn]
size_t strspn(const char *s, const char * accept);//若strcspn()返回的数值为n, 则代表字符串s 连续有n 个字符都包含accept 内的字符

char *s="Golden Global View";
    cout<<strspn(s, " ")<<endl;//0,开始不包含空格
    cout<<strspn(s, "loG")<<endl;//3
    cout<<strspn(s, "nedloG")<<endl;//6
    cout<<strspn(s, "nGew")<<endl;//1

[strcat]
char *strcat(char *dest, const char *src);//把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。

   char src[50], dest[50];
   strcpy(src,  "This is source");
   strcpy(dest, "This is destination");
   strcat(dest, src);
   printf("最终的目标字符串: |%s|", dest);//最终的目标字符串: |This is destinationThis is source|

[substr]
basic_string substr(size_type _Off = 0,size_type _Count = npos) const;
//_Off:所需的子字符串的起始位置。字符串中第一个字符的索引为 0,默认值为0。
//_Count:复制的字符数目
//返回值:一个子字符串,从其指定的位置开始

[memcmp]
int memcmp(const void *str1, const void *str2, size_t n)) 把存储区 str1 和存储区 str2 的前 n 个字节进行比较
str1 – 指向内存块的指针。
str2 – 指向内存块的指针。
n – 要被比较的字节数
返回值
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str1 大于 str2。
如果返回值 = 0,则表示 str1 等于 str2。

[memchr]
void *memchr(const void *str, int c, size_t n) 在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。
参数
str – 指向要执行搜索的内存块。
c – 以 int 形式传递的值,但是函数在每次字节搜索时是使用该值的无符号字符形式。
n – 要被分析的字节数。
返回值
该函数返回一个指向匹配字节的指针,如果在给定的内存区域未出现字符,则返回 NULL。

[printf]
printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h
int printf ( const char * format, … );//函数原型
返回值:
正确返回输出的字符总数,错误返回负值,与此同时,输入输出流错误标志将被置值,可由指示器ferror来检查输入输出流的错误标志。
printf的格式控制字符串组成如下:
%[flags][width][.prec][length]type
%[标志][最小宽度][.精度][类型长度]类型

[fprintf]
fprintf()用于文件操作,函数原型
#include <stdio.h>
int fprintf( FILE *stream, const char *format, … );
fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf()可以使得信息输出到指定的文件
stdout – 标准输出设备
stderr – 标准错误输出设备
stdout和stderr区别:都是默认向屏幕输出,stdout是行缓存的,而stderr是无缓存的,直接输出。

//示例:输出HelloMary 到文件output.txt
char name[20] = "Mary";
FILE *out;
out = fopen( "output.txt", "w" );
if( out != NULL )
	fprintf( out, "Hello %s\n", name );
fclose(out);

[sprintf]
函数功能:把格式化的数据写入某个字符串
函数原型:int sprintf( char *buffer, const char *format [, argument] … );
返回值:字符串长度(strlen)

//示例
char name[20] = "make";
int age = 20;
char desc[50];
sprintf(desc,"my name is %s,age:%d.",name,age);
printf(":%s\n",desc);//输出:my name is make,age:20

[snprintf]
函数原型:int snprintf(char* dest_str,size_t size,const char* format,…);
将可变个参数(…)按照format格式化成字符串,然后将其复制到str中。
(1) 如果格式化后的字符串长度 < size,则将此字符串全部复制到str中,并给其后添加一个字符串结束符(‘\0’);
(2) 如果格式化后的字符串长度 >= size,则只将其中的(size-1)个字符复制到str中,并给其后添加一个字符串结束符(‘\0’),返回值为欲写入的字符串长度。

[strdup]
c语言中常用的一种字符串拷贝库函数,一般和 free() 函数成对出现
char *strdup(char *s);//将字符串拷贝到新建的位置处,strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时,需要用free()释放相应的内存空间,否则会造成内存泄漏.
返回值:返回一个指针,指向为复制字符串分配的空间;如果分配空间失败,则返回NULL值。

[strtok]
char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。
str – 要被分解成一组小字符串的字符串。
delim – 包含分隔符的 C 字符串。
示例

    char str[80] = "chu-123-xx";
    const char s[2] = "-";
    char *token;
    token = strtok(str, s);/* 获取第一个子字符串 */
    while( token != NULL ) {/* 继续获取其他的子字符串 */
        printf( "%s\n", token );
        token = strtok(NULL, s);
    }

打印
chu
123
xx

sizeof()、strlen()、length()和size()

sizeof():返回所占总空间的字节数
(1)、对于整型字符型数组
(2)、对于整型或字符型指针
sizeof(…)是运算符,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。

strlen():返回字符数组或字符串所占的字节数
(1)、针对字符数组
(2)、针对字符指针
strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到’\0’停止。

c/c++ strlen(str)和str.length()和str.size()都可以求字符串长度。
其中str.length()和str.size()是用于求string类对象的成员函数
strlen(str)是用于求字符数组的长度,其参数是char*。

举例:
1)char* ss = “0123456789”;
sizeof(ss)为4,ss是指向字符串常量的字符指针,sizeof 获得的是指针所占的空间,则为4
sizeof(*ss)为1,ss是第一个char字符,则为1
2)char ss[] = “0123456789”;
sizeof(ss)为11,ss是数组,计算到’\0’位置,因此是(10+1)
sizeof(ss)为1,ss是第一个字符
3)char ss[100] = “0123456789”;
sizeof(ss)为100,ss表示在内存中预分配的大小,100
1
strlen(ss)为10,它的内部实现用一个循环计算字符串的长度,直到’\0’为止。
4)int ss[100] = “0123456789”;
sizeof(ss)为400,ss表示在内存中预分配的大小,100
4
strlen(ss)错误,strlen参数只能是char
,且必须是以’\0’结尾
5)char[] a={‘a’,‘b’,‘c’};
sizeof(a)的值应该为3。
char[] b={“abc”};
sizeof(b)的值应该是4。
若string str={‘a’,‘b’,‘c’,‘\0’,‘X’};
那么sizeof(str)为5,strlen(str)为3。

string中length()和size()
c++中的size()和length()没有区别
这两个函数一样。 length()是因为沿用C语言的习惯而保留下来的,string类最初只有length(),引入STL之后,为了兼容又加入了size(),它是作为STL容器的属性存在的,便于符合STL的接口规则,以便用于STL的算法。
string类的size()/length()方法返回的是字节数,不管是否有汉字
汉字一般占用2个字节,数字和英文字母占用1个字节
特殊字符一般英文输入法是占用1个字节,中文输入法占用2个或4个字节,比如英文感叹号占用1个字节,中文输入的感叹号占用2个字节

字符串中含有\r\n,打印时不换行问题

待打印的字符串包含\r\n,打印输出\r\n,所有字符都打印在一行,没有换行,阅读起来很不方便,可做如下处理再打印

    std::string input = "v=0\\r\\no=MetaRtc 140729008552664 2 IN IP4 0.0.0.0\\r\\ns=MetaRtcSession\\r\\nt=0\\r\\n";
    std::string::size_type pos = 0;
    while ((pos = input.find("\\r\\n", pos)) != std::string::npos)
    {
        input.replace(pos, 4, "\r\n");
    }
    printf("localsdp=%s\n",input.c_str());

打印输出

srtp init success!
localsdp=v=0
o=MetaRtc 140729008552664 2 IN IP4 0.0.0.0
s=MetaRtcSession
t=0 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++/QT中的字符串 的相关文章

  • Qt - QProcess 不工作

    我尝试启动 Internet Explorer 所以我使用下面的代码 QProcess process new QProcess this QString temp C Program Files Internet Explorer iex
  • 为什么这个 Web api 控制器不并发?

    我有一个 Web API 控制器 里面有以下方法 public string Tester Thread Sleep 2000 return OK 当我调用它 10 次 使用 Fiddler 时 我预计所有 10 次调用都会在大约 2 秒后
  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • 转换 const void*

    我有一个函数返回一个const void 我想用它的信息作为char 我可以将它投射为 C 风格的罚款 char variable但是当我尝试使用reinterpret cast like reinterpret cast
  • MVC3中设置下拉列表中的所选项目

    我必须为视图中的下拉列表设置所选项目 但它不起作用 View div class editor label Html LabelFor model gt model Gender div div class editor field Htm
  • 传递 constexpr 对象

    我决定给予新的C 14的定义constexpr旋转并充分利用它 我决定编写一个小的编译时字符串解析器 然而 我正在努力保持我的对象constexpr将其传递给函数时 考虑以下代码 include
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 即使没有异步,CallContext.LogicalGetData 也会恢复。为什么?

    我注意到CallContext LogicalSetData LogicalGetData不按照我期望的方式工作 内部设置的值async方法得到恢复即使没有异步或任何类型的线程切换 无论如何 这是一个简单的例子 using System u
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person
  • 没有“对 *this”功能的右值引用的解决方法

    我有一个围绕可移动对象的代理容器类 并希望代理能够隐式生成对底层对象的右值引用 但仅当代理本身被移动时 我相信我将能够按照提案 n2439 实施此行为 将移动语义扩展到 this http www open std org jtc1 sc2
  • 当用户更改 Windows 中的语言键盘布局时如何通知?

    I want to show a message to user when the user changes the language keyboard layout of Windows for example from EN to FR

随机推荐

  • 使用TextInputLayout创建一个登陆界面(j界面很漂亮)

    http www jcodecraeer com a basictutorial 2015 0821 3338 html
  • xss、csrf、ssrf的区别

    要想搞懂这三者有什么区别 首先需要知道它们的原理 xss 原理 跨站脚本攻击 攻击分类造成危害为 存储型 gt 反射型 gt DOM型 与SQL注入差不多 SQL注入漏洞是WEB应用程序未对用户输入的参数严格的过滤 导致被攻击者恶意拼接SQ
  • React中使用SVG文件显示成图片

    SVG 没法直接渲染都img 一般引用插件 方案一 使用 create react app脚手架 创建react项目 方案二 file loader 插件 SVG文件优缺点 优点 不失真 放大缩小图像都很清晰 SVG文件是纯粹的XML 也是
  • 'mvn-v' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    当我下载安装好maven 想通过测试出现看是否配置成功的时候 出现了问题 如下 如何解决 首先我的JDK是没有问题的 就是我的java程序编译都是可以的 那么就应该是配置maven的时候出现了问题 正确的参数的配置如下 1 新建变量 我这里
  • 什么是信号和槽?纯C++中如何实现信号和槽?

    什么是信号和槽 在Qt框架中 信号和槽是一种非常灵活的机制 用于在对象之间进行通信 信号和槽可以将两个对象解耦并连接起来 从而使得一个对象发生变化时 另一个对象就能够接收到相应的通知 并执行相关的操作 例如 在编写一个GUI程序时 我们可以
  • python机器人编程——用python实现一个写字机器人

    目录 一 前言 二 整体框架 2 1 系统构成 2 2 硬件介绍 2 2 1主要组成部分 2 2 2机械结构 2 2 3驱动及控制主板 PS电机驱动原理简介 2 2 4其余部分 2 3 机器人python程序框架 2 3 1通信服务模块 2
  • 【Java编程】JavaSE基础总结(五):I/O

    JavaSE基础总结 五 关于 I O 肯定会涉及到操作系统和计算机组成原理相关的知识 I O 简而言之 就是输入输出 那么为什么会有 I O 呢 其实 I O 无时无刻都在我们的身边 比如 读取硬盘上的文件 网络文件传输 鼠标键盘输入 也
  • 七、函数与类——Qt快速入门、三点求圆心实现详解

    在编程中 会经常用到数学计算 所以C 将常用的数学计算 例如求正余弦等 封装成函数 正是我们在3 2 数学计算中学习到的 我们只需要写入简单的语句就可以执行所需要的功能 这正是函数的意义 在这一章的学习 我们会建立起模块化的思维 小的功能模
  • nfs服务器哪个版本稳定,NFS V3与各个版本间的比较

    NFS协议大家应该都知道 随着网络的不断发函 目前已经有了不少版本 今天我们主要讲解一下NFS的基础知识 以及它们版本间的一些对比 包括NFS V2 rfc1094 NFS V3 rfc1813 NFS V4 一 NFS简介 NFS Net
  • 浅析IList与List的区别

    List和IList是 net开发中经常遇到的两种类型 用法上经常会让初学者摸不到头脑 下面简要的分析一下这两种类型的区别 1 IList
  • 方法判断所输入的数是否存在数组中

    需求 定义一个方法判断数组中的某一个数是否存在 将结果返回给调用处 public static void main String args int arr 64 88 514 74 63 12 84 Scanner scanner new
  • Vue 做新闻展示页

    需求 1 做一个新闻展示页 2 新闻分类可以自定义 3 每类新闻的内容 样式不一样 4 上拉加载新的数据 5 点击进入详情页 再返回时 定位到原来的位置 图片展示 采用的技术 轮播图使用 swiper zepto js vue js vue
  • Linux下遍历指定目录的C++实现

    之前在 https blog csdn net fengbingchun article details 51474728 给出了在Windows遍历指定文件夹的C 实现 这里给出在Linux下遍历目录的实现 Windows和Linux下的
  • 机器视觉毕业设计 python车牌识别系统 - opencv 深度学习 机器学习

    1 前言 基于python 机器视觉 的车牌识别系统 学长这里给一个题目综合评分 每项满分5分 难度系数 3分 工作量 3分 创新点 2分 1 课题背景 车牌识别其实是个经典的机器视觉任务了 通过图像处理技术检测 定位 识别车牌上的字符 实
  • 【测试人】最全测试策略总结,这一篇足足够用了......

    目录 导读 前言 一 界面测试 二 控件测试 三 文档测试 四 兼容性测试 五 易用性测试 六 安装测试 七 总结 前言 测试策略 通俗来讲就是6个字 测什么 和 怎么测 具体来讲 就是答好和产品测试相关的六大问题 测试的对象和范围是什么
  • Js三种常用高阶函数

    高阶函数map 定义和用法 map 方法返回一个新数组 数组中的元素为原始数组元素调用函数处理后的值 map 方法按照原始数组元素顺序依次处理元素 注意 map 不会对空数组进行检测 注意 map 不会改变原始数组 高阶函数reduce 定
  • 黑马程序员Java基础视频教程-课程总结文档

    目录 基础入门 day01总结 Java快速入门 IDEA开发工具的使用 基础入门 day02总结 基础语法 基础入门 day03总结 程序流程控制 基础入门 day04总结 数组 基础入门 day05总结 方法 基础入门 day07总结
  • 47 最佳实践-性能最佳实践-PV-qspinlock

    文章目录 47 最佳实践 性能最佳实践 PV qspinlock 47 1 概述 47 2 操作指导 47 最佳实践 性能最佳实践 PV qspinlock 47 1 概述 PV qspinlock主要是针对虚拟化CPU超分场景自旋锁的优化
  • R语言3.13 绘图

    plot函数 plot 可绘制数据的散点图 曲线图等 plot x y 其中x和y是向量 生成x和y的散点图 plot x 其中x是一时间序列 生成时间序列图形 如果x是向量 则产生x关于下标的散点图 如果x是复向量 则绘出复数的实部与虚部
  • C/C++/QT中的字符串

    目录 C语言中的字符串 C 语言中的字符串 Qt中的字符串 C语言str系列库函数 sizeof strlen length 和size 字符串中含有 r n 打印时不换行问题 C语言中的字符串 C语言不存在字符串数据类型 其通过一个以 0