精华内容
下载资源
问答
  • 只能对字符数组的元素赋值,而不能用赋值语句对整个数组赋值. char c[5]; c={′C′,′h′,′i′,′n′,′a′}; //错误,不能对整个数组一次赋值 c[0]=′C′; c[1]=′h′;c[2]=′i′;c[3]=′n′;c[4]=′a′; //对数...

    只能对字符数组的元素赋值,而不能用赋值语句对整个数组赋值.

    char c[5];

    c={′C′,′h′,′i′,′n′,′a′}; //错误,不能对整个数组一次赋值

    c[0]=′C′; c[1]=′h′;c[2]=′i′;c[3]=′n′;c[4]=′a′; //对数组元素赋值,正确

     

    如果已定义了a和b是具有相同类型和长度的数组,且b数组已被初始化,请分析:

    a=b; //错误,不能对整个数组整体赋值

    a[0]=b[0]; //正确,引用数组元素

     

    字符串和字符串结束标志

    常量来初始化字符数组。例如

    char str[]={′′I am happy′′}; 也可以省略花括号,直接写成

    char str[]=′′I am happy′′;

    上面的初始化与下面的初始化等价: char str[]={′I′,′ ′,′a′,′m′,′ ′,′h′,′a′,′p′,′p′,′y′,′\0′};

     

    需要说明的是:字符数组并不要求它的最后一个字 符为′\0′,甚至可以不包含′\0′。如以下这样写完全是合法的:

    char str[5]={′C′,′h′,′i′,′n′,′a′};

    是否需要加′\0′,完全根据需要决定。但是由于 C++编译系统对字符串常量自动加一个′\0′。

    人们为了使处理方法一致,便于测定字符串的实际长度,以及在程序中作相应的处理,在字符数组中有效字符的后面也人为地加上一个′\0′。

    如 char str [6]={′C′,′h′,′i′,′n′,′a′,′\0′};

    转载于:https://www.cnblogs.com/galoishelley/p/3853074.html

    展开全文
  • 1掌握数组的基本概念包括数组的定义数组的类型数组的初始化数组的赋值数组元素下标的范围数组元素的正确以及引用数组元素的输入/输出 2掌握字符数组与字符串的使用方法理解字符数组与其它数组的区别理解字符串及其...
  • 数组使用注意:只能在定义数组的时候初始化。 可以写为intages[5] = {10,11};//前面的赋值 int ages[5] = {[3] =10, [4] =11};// 后面的赋值 比较少用 int ages[] = {10,11,12}; //是正确写法。 int ages[ ]...
    ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
    


    数组:构造类型


    数组使用注意

    1、只能在定义数组的时候初始化

    可以写为intages[5] = {10,11}; // 对前面的赋值

    int ages[5] = {[3] =10, [4] =11}; //  对后面的赋值 比较少用

    int ages[] = {10,11,12};  // 是正确写法。

    int ages[ ];  // 错误的写法。

    int ages[‘A’] = {10,11,12,13}; // 可以这样写

    int count = 5;   int ages[count] = {10,11,12};  // 错误的写法,定义数组时初始化, 数组个数只能是常量或者不写

    int count = 2;   int ages[count]; ages[0]=2; ages[1]=12;  //  这样可以,但要一个一个对应赋值

    2、数组作为函数参数时,可以省略元素个数,例如:void prry(int array[ ])

    3、调用时数组作为函数参数,传递的是整个数组的地址。若修改了函数形参的值是会影响到外面实参数组的值的。

     

    计算数组的长度:

    int ages[ ] = {10,2,58,6};

    int count= sizeof(ages)/sizeof(int);  //  因为一个int型占四个字节,所以除以int的字节数。此处相当于除以4.


    数组在内存中的存储:

    例如ag[0],ag[1],ag[2];是在分配给整个数组的内存中按由小到大存储的,ag[0]就是整个数组的地址。 数组名a就是数组的地址。 

    打印数组的地址:

    <span style="font-size:18px;">#include<stdio.h>
    int main()
    {
        int ages[3] = {12,10,15};
      printf("%p\n", ages);  // 或者写为&ages 取地址符号
    for(int i = 0;i<3; i++)
    {
    <span style="white-space:pre">	</span>printf("ages[%d]的地址是%p\n", i, &ages[i]);
    }
    return 0;
    } </span><span style="font-size:24px;">
    </span>


    练习:求出数组最大值:

    <span style="font-size:18px;">#include <stdio.h>
    int maxarray(int array[ ],int length);
    int main()
    {
    int ages[] = {10,15,65,29,83,14,23};
    int length =sizeof(ages)/sizeof(int);
    maxarray(ages,length);
    return 0;
    }
    int maxarray(int array[ ], int length)
    {
    int max = array[0];
    for(int i= 1; i<length; i++)
    {
    if(array[i]>max)
    { max = array[i]}
    }
    return max;
    }</span>
    


    (字符)字符串:

    char类型用法:字符对应的ASCII码表。char c = ‘A’;  输出字母用%c

    #include<stdio.h>
    int main()
    {
    char c = 'A' + 32;
    printf("%c,%d\n",c,c)  // 分别以字符形式和整数形式输出
    return 0;
    }
    
    char类型使用注意:

    以下几种写法都是错误的:1、 char c = ‘男’; 一个汉字占三个字符2、char c = A ;   3、char c = “A”;     

    正确写法:char c = 65; //如果数字不是很大-128——127之间可以用char这样节省内存

     注意:“转义字符”也是有ASCII码的。例如\n \t  \\  \”   , 要输出一个\ 或者双引号 printf(“\\”);

    char练习:编写一个小写转为大写的函数

    <span style="font-size:18px;">char upper(char c)
    {
    if(c>=’a’ && c<=’z’)
    {
      return c-('a’- 'A’); // 也就是减去32
    }
    return c;
    }</span><span style="font-size:24px;">
    </span>

    字符串:字符串要有’\0’做结束标志

    例如:“jack” = ‘j’ + ‘a’ + ‘c’ + ‘k’ + ‘\0’  是有这五个字符组成的,最后一个是’\0’

    C语言中存储字符串用字符数组。char name[10] = “jack”; printf(name);

    char name1[8] = “it”;

    char name2[8] = {‘i’, ‘t’, ‘\0’};

    char name3[8] = {‘i’, ‘t’,0}; 

    char name4[8] = {‘i’, ‘t’}; 

    以上四种写法结果一样,因为\0 的ASCII码值为0

     \0的用法:

    <span style="font-size:18px;">#include <stdio.h>
    int main()
    {
    char name[ ] = "it";
    char name2[ ] = {'o', 'k'};
    printf("%s\n",name2);   /* name2相当于传递数组的地址。输出结果为okit。因为占位符%s要求输出一个字符串,而name2为一个                         字符数组,所以在内存中它就向下寻址,直到遇到 \0为止。若在name2中增加’\0’ 。则正常输出。
                             若为printf(“%s\n”,&name2[1]); 从name2的第二个元素地址开始寻找。则输出kit */
    return 0;
    }</span>

    strlen函数用法和注意:

    计算字符串的字符数的长度(不包括\0的长度)。

    strlen从一个起始地址开始数直到遇到\0 才为止。

    使用时加头文件 #include <string.h>

    <span style="font-size:18px;">#include <string.h>
    #include <stdio.h>
    int main()
    {
    int size = strlen("哈haha");
    printf("%d\n", size); // 输出7,一个汉字占三个字符。
    return 0;
    }
    </span>

    字符串练习:写一个函数,当字符串中含有指定字符时输出1,没有输出0。

    #include <stdio.h>
    #include <string.h>
    int char_cont(char str[], char c);
    int main()
    {
    char name[ ] = "itcast";
    int result = char_cont(name, 'c');
    printf("%d\n", result);
    return 0;
    }
    int char_cont(char str[], char c)
    {
    int i = 0;
    while(str[] != '0’)  // 也可以写为while(str[i] != 0)或者while(str[i])
    {
    if(str[i] == c)
    { return 1;}
    }
    return 0;
    }
    

    字符串数组:

    即二维数组,

    char name[3][10] = {“jack”, “rose”, “jim”}; // 定义三个人的姓名,每一个最多十个字符。

    printf(“%s\n”, name[1]);  // 输出rose













    展开全文
  • 两个字符a和b进行初始化:char a[]="ABCDEF";char b[]={'A','B','C','D','E','F'};则以下叙述正确的是: 正确答案: A 你的答案: 空 (错误) a数组比b数组长度长 a与b长度相同 a与b数组完全...

    对两个字符a和b进行初始化:char a[]="ABCDEF";char b[]={'A','B','C','D','E','F'};则以下叙述正确的是:

    正确答案: A   你的答案: 空 (错误)

    a数组比b数组长度长
    a与b长度相同
    a与b数组完全相同
    a和b中都存放字符串


    题目说的是长度,应该是strlen(),对a求长度为6,但是对b求长度是一个未知的大小,应该strlen()知道遇到'\0'才停止,所以a,b之间的长度不能比较,sizeof是大小,sizeof(a)=7,sizeof(b)=6,应该把题目的长度换成大小

    展开全文
  • 3.memset的对字符数组初始化的方法总结 4.模拟题中构造字符数组的正确初始化与结束符号的标记 5.防止惯性思维,不要把自己的常识加到题目当中 6.vector的另外一个强大函数功能补充erase() 7.对string的直接...
    • 1.递归思想
    • 2.编码思想
    • 3.memset的对字符数组初始化的方法总结
    • 4.模拟题中构造字符数组的正确初始化与结束符号的标记
    • 5.防止惯性思维,不要把自己的常识加到题目当中
    • 6.vector的另外一个强大函数功能补充erase()
    • 7.对string的直接修改是可以的
    • 8.关于迭代器的更深的认识,在使用erase函数之后的迭代器自动移后一位

    3.memset对字符数组进行初始化的小结

    不同于对于整型数组的初始化只能使用初始化为0或-1

    对一个一维的字符数组进行初始化可以初始化为各种字符:

    int n , m;
    	cin >> n >> m;
    	char seat[n * m];
    	memset(seat , '1' , sizeof(seat));
    	for(int i = 0 ;  i < n*m ; i++){
    		cout << seat[i] << " "; 
    	}
    	memset(seat , '0' , sizeof(seat));
    	for(int i = 0 ;  i < n*m ; i++){
    		cout << seat[i] << " "; 
    	}
    	memset(seat , 'a' , sizeof(seat));
    	for(int i = 0 ;  i < n*m ; i++){
    		cout << seat[i] << " "; 
    	}
    	memset(seat , 'b' , sizeof(seat));
    	for(int i = 0 ;  i < n*m ; i++){
    		cout << seat[i] << " "; 
    	}

    对于二维数组:

    	int n , m;
    	cin >> n >> m;
    	char seat[n][m];
    	memset(seat , '1' , sizeof(seat));
    	for(int i = 0 ;  i < n ; i++){
    		for(int  j = 0 ; j < m ; j++){
    		cout << seat[i][j] << " "; 
    		}
    		cout << endl;
    	}

    其他的也可以

    4.模拟题中使用字符数组正确的顺序

    				char temp[num+1];
    				memset(temp ,'f', sizeof(temp));
    				temp[num] = '\0';

    就这一段模拟一个确定长度的字符串,必须按照这种顺序去写,否则会出问题

    5.不要把自己的常识加到题目当中,有时候如果题目中有新的概念或者定义,一般都是反常识的

    比如作业2中的日历问题,开始怎么提交都不对,反复修改还是不对,最后没办法问室友,室友告诉我

    20 * 13 = 260 ,我之前一直觉得一年既然不是365天,那么就是是360天吧

    这就说明了我被现实中获得的经验所束缚,明明环境已然改变,我却还是很固执地按照自己的办法去做事

    最后,导致的结果就是不通过,这也说明今后真的需要好好地反思,可能自己的创新不够,突破不够,才会犯这样的错误

    6.vector的另外一个强大函数功能补充erase()

    这个功能在有些情况似乎是非常需要,比如内存分配类似的问题

    Removes from the vector either a single element (position) or a range of elements ([first,last)).

    This effectively reduces the container size by the number of elements removed, which are destroyed.

    有两种用法

    position

    Iterator pointing to a single element to be removed from the vector.
    Member types iterator and const_iterator are random access iterator types that point to elements.

    使用迭代器直接删除某个元素

    first, last

    Iterators specifying a range within the vector] to be removed: [first,last). i.e., the range includes all the elements between first and last, including the element pointed by first but not the one pointed by last.
    Member types iterator and const_iterator are random access iterator types that point to elements.

    使用迭代器删除两个迭代器中间的所有部分和第一个迭代器所指的元素

    例子:删除某个元素:

    #include <bits/stdc++.h>
    using namespace std;
    int main(){
    	vector <int> vec;
    	for(int i = 0 ; i < 10 ; i++){
    		vec.push_back(i+1);
    	}
    //	for(int i = 0  ; i < 10 ; i++){
    //		if(vec[i] == 4){
    			vec.erase(vec[i]);
    			vec.erase(&vec[i]);
    			vec.erase(i);
    			vec.erase(4);
    //		}
    //	}
    	vector <int> :: iterator it;
    	for(it = vec.begin() ; it != vec.end() ;){	
    		if((*it) == 4){
    			vec.erase(it);
    		}
            else{
                it++;
            }
    	}
    	while(!vec.empty()){
    		cout << vec.back() << " "; 
    		vec.pop_back();
    	}
    	return 0;
    }

    (4已经被删除)

    注释掉的部分是常见的错误的写法

    注意这里的erase函数与string类函数的区别,因为string类函数除了使用迭代器删除某个元素和某段元素之外还有一种

    传入两个int型参数start和length实现删除从start开始长度为length的一段的连续字符串的功能

    示例:

    删除某一段元素:

    #include <bits/stdc++.h>
    using namespace std;
    int main(){
    	vector <char> vec;
    	for(int i = 0 ; i < 10 ; i++){
    		vec.push_back((char)(i + 48));
    	}
    	vec.push_back('[');
    	for(int i = 0 ; i < 10 ; i++){
    		vec.push_back(i);
    	}
    	vec.push_back(']');
    	for(int i = 9 ; i >= 0 ; i--){
    		vec.push_back(i + 48);
    	}
    	int size = vec.size();
    	for(int i = 0 ; i < size ; i++){
    		cout << vec[i] << " ";
    	}
    	cout << endl;
    	vector <char> :: iterator first , last , it;
    	for(it = vec.begin() ; it != vec.end() ; it++){	
    		if((*it) == '['){
    			first = it;
    		}
    		else if((*it) == ']'){
    			last = it;
    		}
    	}
    	vec.erase(first,last + 1);//如果不加1,则后面的括号删不掉
    	size = vec.size();
    	for(int i = 0 ; i < size ; i++){
    		cout << vec[i] << " ";
    	}
    	return 0;
    }

    这里最好玩的是这个字符里面有个闹铃字符,如果运行,会响一下

    但是只会响一次,因为第二次已经被删掉了,就不会再响了

    7.string类的修改没有一点问题

    #include <bis/stdc++.h>
    using namespace std;
    int main(){
    	string str = "123456789";
    	str[0] = 1;
    	str[2] = 1;
    	str[8] = 1;
    	cout << str;
    	return 0;
    }

    8.每个容器的迭代器在使用erase操作之后会自动向后移动一位

    比如对于vector的erase操作:

    Return value of .erase() in vector

    An iterator pointing to the new location of the element that followed the last element erased by the function call. This is the container end if the operation erased the last element in the sequence.

    如果删除的不是最后一个元素,那么返回值为一个指向与当前被移除的元素的下一个元素的迭代器,否则就会返回指向.end()的迭代器

    再比如对string的erase操作:

    Return value of .erase() in string

    sequence (1)
     string& erase (size_t pos = 0, size_t len = npos);
    
    character (2)
    iterator erase (const_iterator p);
    
    range (3)
    iterator erase (const_iterator first, const_iterator last);

    The sequence version (1) returns *this.
    The others return an iterator referring to the character that now occupies the position of the first character erased, or string::end if no such character exists.

    第一种返回this指针(就是自己这种类型的变量,在这里是一个string,可以用一个新的string变量来接收),另外两种迭代器返回的也是迭代器,指向被删除的未知的新的元素(后面补上来的那个,相当于后移)

    如果后面没有元素补上来,那么就返回一个指向.end()的迭代器

    举例:

    #include <bits/stdc++.h>
    using namespace std;
    int main(){
    	string str = "123456789";
    	string str1 = str.erase(0,2);
    	cout << str << endl << str1;
    	return 0;
    }

    展开全文
  • 字符数组的赋值问题 1.单个元素进行赋值。 char s[10]; s[0]='g'; s[1]='o'; s[2]='o'; s[3]='o'; s[4]='\0';s="good" //错误 PS:当检查到'\0'时,就认为一个字符串结束了。 2.用串常量初始化。 char s[5]={"good...
  • 两个数组a和b进行如下初始化: char a[]=ABCDEF; char b[]={A,B,C,D,E,F}; 则下面描述正确的是 A. a 和b数组完全相同 B. a 和b中都存放字符串 C. sizeof(a)比sizeof(b)大 D. sizeof(a)与sizeof(b)相同 2. 以下程序...
  • 两个数组a和b进行如下初始化: char a[]=ABCDEF; char b[]={A,B,C,D,E,F}; 则下面描述正确的是 A. a 和b数组完全相同 B. a 和b中都存放字符串 C. sizeof(a)比sizeof(b)大 D. sizeof(a)与sizeof(b)相同 [答案] C 2....
  • C语言的正确使用

    2013-03-16 14:19:38
    说明:1、可以使用双引号对字符数组赋值;  2、一维数组的元素个数假如在定义时初始化,可以不指定。 2、 char* cp=“str1” "str2"; 或 char* cp="str1""str2"; 说明:在定义并初始化字符串常量的指针时,...
  • 在c语言中不存在字符串这种数据类型,是通过字符数组对字符串进行模拟。 2.字符串的初始化正确:char buf[100] = {0};或者char buf[] = “adsdasda”; 注意:(1)若是char buf[] = {‘a’,‘b’,‘c’};这种...
  • C语言只有在定义字符数组的时候才能用“=”来初始化变量,其它情况下是不能直接用“=”来为字符数组赋值的,要为字符数组赋值可以用string.h头文件中的strcpy函数来完成。 例如: char a[10] = "123"; /*正确,在...
  • 下列对字符数组进行初始化的语句正确的是? A.char a[] =“Hello”; B.char a[][]={‘H’,‘e’,‘l’,‘l’,‘o’}; C.char a[5]= “Hello”; D.char a[2][5]={ “Hello”,“World”}; 做这道题目的时候我是...
  • 第7章 数组 概述 7.1 一维数组 7.2 字符串 7.3 数组在函数中的应用 7.4 数组是C语言...学习目标 掌握对数组的正确定义 掌握对数组的正确引用 掌握对数组初始化 字符串的输入输出和处理 掌握数组在函数中的运用 7.1 概
  • 牛客网错题收集(3)

    2020-03-30 09:40:08
    下列对字符数组进行初始化的语句正确的是? 正确答案: A 你的答案: A (正确) char a[] =“Hello”; char a[][]={‘H’,‘e’,‘l’,‘l’,‘o’}; char a[5]= “Hello”; char a[2][5]={ “Hello”,“World”}; 解释...
  • 异常日志

    2020-11-25 23:18:56
    依然是空的,所以还需要每个元素都进行初始化(如果要调用的话)。 2.java.lang.ClassNotFoundException 指定的类不存在 这里主要考虑一下类的名称和路径是否正确即可,通常都是程序试图通过字符串来加载某个类时...
  • 首先,定义一个字符指针,和一个字符数组,并它们进行初始化 char *ptr ="hello "; char str[]="nihao"; 在这里提一下,以下定义正确,此时字符指针指向一个字符串常量首地址 char *ptr; ptr ="hello" 但是,下面...
  • 书中列出了C用户经常问的400多个经典问题,涵盖了初始化数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 本书结构清晰,讲解透彻,是各高校相关...
  • 数组初始化 126 数组的复制 127 输入数组元素的值 129 对数组的元素进行倒序排列 129 使用数组进行成绩处理 131 对象式宏 131 数组元素的最大值和最小值 133 赋值表达式的判断 134 数组的元素个数 135 5-2...
  • 第1章 声明和初始化 基本类型 1.1 我该如何决定使用哪种整数类型? 1.2 为什么不精确定义标准类型的大小? 1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后根据实际的机器...
  • 第1章 声明和初始化 基本类型 1.1 我该如何决定使用哪种整数类型? 1.2 为什么不精确定义标准类型的大小? 1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后根据实际的机器...
  • 第1章 声明和初始化 基本类型 1.1 我该如何决定使用哪种整数类型? 1.2 为什么不精确定义标准类型的大小? 1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后根据实际的机器...
  • 书中列出了C用户经常问的400多个经典问题,涵盖了初始化数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。  本书结构清晰,讲解透彻,是各高校...
  • C语言编译系统数组名的处理是:数组名代表该数组的起始地址,且scanf函数中的输入项是字符数组名,不必要再加地址符&。应改为: scanf("%s",str); 18.同时定义了形参和函数中的局部变量。 int max(x,y) int x,y,z;...
  • 作者在网络版CFAQ列表的基础上进行了大幅度的扩充和丰富,结合代码示例,权威而且详细深入地解答了实际学习和工作中最常遇到的495个C语言问题,涵盖了初始化数组、指针、字符串、内存分配、库函数、C预处理器等...
  • ~第1章 声明和初始化 1 基本类型 1 1.1 我该如何决定使用哪种整数类型? 1  1.2 为什么不精确定义标准类型的大小? 2 1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    书中列出了C用户经常问的400多个经典问题,涵盖了初始化数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道的495个C语言问题》结构...
  • 前缀树与贪心

    2019-05-11 23:05:01
    toCharArray:这个函数是将字符串转换为字符数组,牛逼啊; nexts[],代表26个字母,0~25,代表A~Z 初始化 26,代表着26种可能,即A~Z 删除操作: 在JVM中就不需要再释放了 c++来说,要遍历后,依次...
  • 这里应说明的是并不是把整个字符串装入指针变量, 而是把存放该字符串的字符数组的首地址装入指针变量。 在后面还将详细介绍。 ⑥把函数的入口地址赋予指向函数的指针变量。例如: int (*pf)();pf=f; /*f为函数名*...
  • 5.1.3 数组初始化 124 5.2 函数中的数组 125 5.2.1 作为函数实参的索引变量 125 5.2.2 整个数组作为函数实参 126 5.2.3 const参数修饰词 129 5.2.4 返回一个数组的函数 130 5.3 用数组编程 134 5.4 多维...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 136
精华内容 54
关键字:

对字符数组初始化正确的