C语言中有string吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中有string吗?相关的知识,希望对你有一定的参考价值。
C语言中没有string类型。
string类型是 C++、java、VB等编程语言中的。 在java、C#中,String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。string 是C++标准程序库中的一个头文件,定义了C++标准中的字符串的基本模板类std::basic_string及相关的模板类实例。
而在C语言中,C语言中没有字符串类型,字符串是存放在字符型数组中的,将字符串作为字符数组来处理的。为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符'\\0'作为结束标志 。
扩展资料:
C++中string的使用:
其中的string是以char作为模板参数的模板类实例,把字符串的内存管理责任由string负责而不是由编程者负责,大大减轻了C语言风格的字符串的麻烦。std::basic_string提供了大量的字符串操作函数,如比较、连接、搜索、替换、获得子串等。并可与C语言风格字符串双向转换。
字符串在C语言中的使用:
字符串常量初始化数组。如:char c[ ]=‘c’,‘ ’,‘p’,‘r’,‘o','g','r','a','m';可写为:char c[ ]="C program"; 或去掉写为:char c[ ]="C program"。
参考资料来源:百度百科-string类
参考资料来源:百度百科-字符数组
参考技术A 一直以来对这个问题都不是很清楚:只是知道C语言里有<string.h这个头文件,所以就想当然的认为C语言里有string这个类型,可以通过下面这种形式来声明string的变量 string aString;
后来编程时发现通不过编译,又查资料才知道原来C语言里压根就没有string这个类型,所以字符串都是通过char数组来存储的,
而<string.h这个头文件里声明的函数原型也全是针对char数组的种种操作。直到C++中才出现了string这个类(注意是类,
不是类型)。这是网上我找到的比较满意的答复:
" C语言中有string类型变量吗"
这里的 string 有 二 义性。
(1) 如果 string 是普通词汇,“C语言中有字符类型变量吗”, 答,有。 字符类型 用 char 声明。
char str[]="This is a string";
(2) 如果 string 是专用词汇,“C语言中有string类型变量吗”,答,没有。string 是 类,是 class, 不是
类型,不是 type.本回答被提问者采纳 参考技术B C语言提供了丰富的字符串处理函数, 大致可分为字符串的输入、输出、合并、修改、比较、转换、复制、搜索几类。 使用这些函数可大大减轻编程的负担。用于输入输出的字符串函数, 在使用前应包含头文件"stdio.h" ; 使用其它字符串函数则应包含头文件"string.h"。 下面介绍几个最常用的字符串函数。
1.字符串输出函数 puts 格式: puts (字符数组名) 功能:把字符数组中的字符串输出到显示器。 即在屏幕上显示该字符串
#include"stdio.h"
main()
static char c[]="BASIC\ndBASE";
puts(c);
2.字符串输入函数gets 格式: gets (字符数组名) 功能:从标准输入设备键盘上输入一个字符串。 本函数得到一个函数值,即为该字符数组的首地址。
#include"stdio.h"
main()
char st[15];
printf("input string:\n");
gets(st);
puts(st);
3.字符串连接函数strcat 格式: strcat (字符数组名1,字符数组名2) 功能:把字符数组2中的字符串连接到字符数组1 中字符串的后面,并删去字符串1后的串标志“\0”。本函数返回值是字符数组1的首地址。
#include"string.h"
main()
static char st1[30]="My name is ";
int st2[10];
printf("input your name:\n");
gets(st2);
strcat(st1,st2);
puts(st1);
4.字符串拷贝函数strcpy 格式: strcpy (字符数组名1,字符数组名2) 功能:把字符数组2中的字符串拷贝到字符数组1中。串结束标志“\0”也一同拷贝。字符数名2, 也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。
#include"string.h"
main()
static char st1[15],st2[]="C Language";
strcpy(st1,st2);
puts(st1);printf("\n");
5.字符串比较函数strcmp 格式: strcmp(字符数组名1,字符数组名2) 功能:按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。
字符串1=字符串2,返回值=0;
字符串2〉字符串2,返回值〉0;
字符串1〈字符串2,返回值〈0。
本函数也可用于比较两个字符串常量,或比较数组和字符串常量。
#include"string.h"
main()
int k;
static char st1[15],st2[]="C Language";
printf("input a string:\n");
gets(st1);
k=strcmp(st1,st2);
if(k==0) printf("st1=st2\n");
if(k>0) printf("st1>st2\n");
if(k<0) printf("st1<st2\n");
6.测字符串长度函数strlen 格式: strlen(字符数组名) 功能:测字符串的实际长度(不含字符串结束标志‘\0’) 并作为函数返回值。
#include"string.h"
main()
int k;
static char st[]="C language";
k=strlen(st);
printf("The lenth of the string is %d\n",k);
参考技术C string是C++里才新定义出来的类型,使用前要#include <string>,C里面用的是C风格的字符串
即使是C++用的时候也要使用namespace——————std::string i = "";头文件string 参考技术D string src="hello"可以这么理解.
在头文件里有:
typedef char *string
所以这一句其实就是:
char *src="hello";
就是在声明了一个字符串数组后对其进行了初始化.
这一句可以写成这样:
char src[6]="hello";
这一句理解了,后面两句也就容易理解了.
string filename,temp
就是:
char *filename,*temp
是两个字符类型的指针.
Java String 数组:有方法的大小吗?
【中文标题】Java String 数组:有方法的大小吗?【英文标题】:Java String array: is there a size of method? 【发布时间】:2010-10-29 14:44:26 【问题描述】:我来自 php 背景,在 php 中有一个 array_size()
函数,它告诉你数组中有多少元素被使用。
String[]
数组是否有类似的方法?谢谢。
【问题讨论】:
嘿,所有答案都在同一分钟内。 啊,PHP 的全局命名空间杂乱无章。过去的美好时光...... 我认为他的意思是 php 的 count() 而不是 array_size() 【参考方案1】:是的,.length
(类似于属性,不是方法):
String[] array = new String[10];
int size = array.length;
【讨论】:
嗨,我们如何找到列出数组对象所有可能属性和函数的文档?我不是指 Arrays 对象,它是我能找到的唯一文档。 @GMsoF “[]”(数组,而不是数组对象)的文档实际上是 Java 规范。 .e.g docs.oracle.com/javase/specs/jls/se7/html/jls-10.html 编辑:啊...评论来自2013年...【参考方案2】:array.length
它实际上是数组的最终成员,而不是方法。
【讨论】:
IIRC,它实际上不是一个字段,它只是看起来像一个。 哦,那是什么?一些特殊的 Array 东西? 一个“伪字段”,它被编译成一个特殊的数组长度操作码,而不是字段访问操作码。 它是一个字段,根据§10.7 (java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7):“公共最终字段长度,包含数组的组件数(长度可以是正数或零)。” 【参考方案3】:另外,请注意,如果您有一个多维数组,您可以通过将“[0]”附加到您正在查询的数组中来获取相应的维度,直到您到达适当的轴/元组/维度。
下面的代码可能会更好地解释这一点:
public class Test
public static void main(String[] args)
String[][] moo = new String[5][12];
System.out.println(moo.length); //Prints the size of the First Dimension in the array
System.out.println(moo[0].length);//Prints the size of the Second Dimension in the array
产生输出:
5
12
【讨论】:
【参考方案4】:array.length 最终属性
它是公共的和最终的财产。它是最终的,因为 Java 中的数组在大小上是不可变的(但在元素的值上是可变的)
【讨论】:
【参考方案5】:数组是对象,它们有一个长度字段。
String[] 哈哈 = "olle", "bulle";
haha.length 将是 2
【讨论】:
只是吹毛求疵。但我相信数组不是 Java 中的对象——它们是两种引用类型的变量之一。另一个是对象。 @jabbie:真的吗?你有这方面的参考吗?我只是质疑它,因为你可以说 Object o = new String[] "hello" ; simon 我认为该语句起作用的原因是因为它们为所有原始类型引入了自反类。 阅读docs.oracle.com/javase/specs/jls/se8/html/jls-10.html 的第一句话,然后尝试告诉我们数组不是对象。 ;) 你可以使用其他变量名,这让我分心【参考方案6】:在 java 中有一个 length
字段,您可以在任何数组上使用它来找出它的大小:
String[] s = new String[10];
System.out.println(s.length);
【讨论】:
感谢您没有深入了解它可能是什么或可能不是什么的技术细节,只是提供了一个简短而简洁的答案。为你+1。 :)【参考方案7】:如果你想要一个函数来做这个
Object array = new String[10];
int size = Array.getlength(array);
如果你不知道你有什么类型的数组,这可能很有用,例如int[]、byte[] 或 Object[]。
【讨论】:
【参考方案8】:String
和array
的长度有区别,澄清一下:
int a[] = 1, 2, 3, 4;
String s = "1234";
a.length //gives the length of the array
s.length() //gives the length of the string
【讨论】:
如果是澄清,应该在问题中更新。【参考方案9】:答案是“全部”。 java 数组分配有固定数量的元素槽。 “长度”属性会告诉你有多少。该数字在阵列的生命周期内是不可变的。对于可调整大小的等价物,您需要 java.util.List 类之一 - 您可以在其中使用 size() 方法找出正在使用的元素数量。
但是,有“使用中”,然后有 使用中。在类对象数组中,您可以拥有元素为空对象的元素槽,因此即使它们计入长度属性,但大多数人的定义,它们并没有被使用(YMMV,取决于应用程序)。没有用于返回空/非空计数的内置函数。
列表对象还有另一个“使用中”的定义。为了避免过度创建/破坏底层存储结构,这些类中通常有一些填充。它在内部使用,但不计入返回的 size() 方法。如果您尝试访问这些项目而不展开 List(通过 add 方法),您将获得非法索引异常。
因此,对于列表,您可以将“In Use”用于非空、已提交元素、所有已提交元素(包括空元素)或所有元素,包括当前分配的扩展空间。
【讨论】:
【参考方案10】:以上所有答案都是正确的。需要注意的重要一点是数组具有长度属性,但没有长度方法。每当您在 java 中使用字符串和数组时,您可能面临的三个基本模型是:
-
字符串 s=new String("vidyasagar");
System.out.println(s.length()); // 在这种情况下,我们只使用
细绳。字符串没有长度属性。我们必须使用长度()
方法。
int[] s=新的int[10]; System.out.println(s.length); //在这里,我们
使用数组的长度属性。
字符串[] s=新字符串[10];
System.out.println(s.length); // 这里即使数据类型是
字符串,它不是单个字符串。 s 是数组的引用
字符串。所以我们使用数组的长度属性来表达如何
许多字符串可以放入该数组中。
【讨论】:
【参考方案11】:并不是你问题的真正答案,但如果你想要一个可以增长和缩小的数组,你不应该在 java 中使用数组。最好使用ArrayList 或其他 List 实现。
然后你可以调用它的 size() 来获取它的大小。
【讨论】:
以上是关于C语言中有string吗?的主要内容,如果未能解决你的问题,请参考以下文章