前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >C++ 练气期之细聊字符串

C++ 练气期之细聊字符串

作者头像
一枚大果壳
发布于 2022-08-23 05:49:07
发布于 2022-08-23 05:49:07
1.3K00
代码可运行
举报
文章被收录于专栏:编程驿站编程驿站
运行总次数:0
代码可运行

1. 概念

程序不仅仅用于数字计算,现代企业级项目中更多流转着充满了烟火气的人间话语。这些话语,在计算机语言称为字符串

从字面上理解字符串,类似于用一根竹签串起了很多字符,让人很容易想起冰糖葫芦

字符串的基本组成元素是字符,可以认为字符串就是字符类型的数组。

量变总会引起质变,字符串是由字符的量变演化出的新类型2 者在数据含义存储结构都有着本质上区别。

1.1 数据含义

C++字符类型当成整型数据类型看待。如下代码,当把A赋值给myChar时, 编译器先获取A的底层 ASCII 编码,然后再把编码值赋值给myChar

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int myChar='A';
cout<<myChar; 
//输出:65

如下代码,编译器先找到97对应的字符,然后再赋值给myChar字符类型整型类型语法层面有差异,在底层,C++一视同仁。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myChar=97;
cout<<myChar; 
//输出:a

所以,用于整型数据类型的运算符都可以用于char类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myChar='B';
char myChar_='A';
int res=myChar+myChar_;
cout<<"加操作:"<<res<<endl; 
res=myChar-myChar_;
cout<<"减操作:"<<res<<endl;
res=myChar*myChar_;
cout<<"乘操作:"<<res<<endl;  
res=myChar/myChar_;
cout<<"除操作:"<<res<<endl; 
bool is=myChar>myChar_;
cout<<"关系操作:"<<is<<endl;

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
加操作:131
减操作:1
乘操作:4290
除操作:1
关系操作:1

虽然,字符串可看成是字符组成的数组,但是,应该把字符串当成一个独立的整体,其数据含义更贴近现实意义:

  • 字符是单一词,所能表达的语义非常有限。
  • 字符串则是由许多字符组成的语句,可用来表达丰富的语义。如:可以是姓名、可以是问候、可以情感表达、可以是提示……根据使用的上下文环境,字符串有其自己特定的现实意义。

1.2 存储结构

字符常量必须用单引号包起来,字符直接存储在变量中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myChar='A';

字符串的存储方案比字符复杂很多,C++支持两种字符串的存储方案:

下面深入了解这 2 种存储方案的区别。

2. C 风格的字符串

C++可以直接延用C语言中的2种字符串存储方案:

2.1 数组

数组存储能较好地诠释字符串是由字符所组成的概念。

使用数组存储时,并不能简单如下代码所示。对于开发者而言,可能想表达的是输出一句HTLLO问候语。但在实际执行时,输出时可能不仅只是HELLO

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myStr[5]= {'H','E','L','L','O'};
cout<<myStr<<endl;

为什么会输出更多信息?

因为cout底层逻辑在输出字符数组时,会以一个特定标识符\0为作为结束标志。cout在输出 myStr字符数组的数据时,如果没有遇到开发者提供的\0结束符号,则会在数组的存储范围之外寻找\0符号。

上述代码虽然能得到HELLO,那是因为在未使用的存储空间中,\0符号很常见。

显然,不能总是去碰运气。所以,在使用字符数组时描述字符串时,则需要在适当位置添加字符串结束标识符\0

因结束符占用了一个存储位,HELLO需要5个存储位,在声明数组时,需要注意数组的实际长度为 6

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myStr[6]= {'H','E','L','L','O','\0'};
cout<<myStr<<endl;
//输出结果:HELLO

执行下面的代码,查看输出结果,想想为什么输出结果是HEL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myStr[6]= {'H','E','L','\0','O','\0'};
cout<<myStr<<endl;
//输出结果:HEL

原因很简单,cout在遇到第一个 \0时,就认定字符串到此结束了。

这里有一个问题,如果实际的字符个数大于数组声明的长度,会出现什么情况?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myStr[3]= {'H','E','L','L','O','\0'};
cout<<myStr<<endl;

如果出现上述代码,说明,你的数组没有学太好。C++规定在使用{}进行字面值初始化数组时,{}内的实际数据个数不能大于数组声明的长度。

当不确定字符串的长度时,可以采用省略[]中数字的方案。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myStr[]= {'H','E','L','L','O','\0'};
cout<<myStr<<endl;

数组存储方案同样具有数组所描述的操作能力,最典型的就是使用下标遍历数组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myStr[6]= {'H','E','L','L','O','\0'};
for(int i=0;i<6;i++){
 cout<<myStr[i]<<endl;
}

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
H
E
L
L
O

在使用上述代码时,有 2 个地方需要注意:

  • 当下标定位到\0数据位时,并不能识别\0是字符串结束符,它只是纯粹当成一个一个字符输出,不具有字符串语义。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myStr[8]= {'H','E','L','L','O','\0','M','Y'};
for(int i=0;i<8;i++){
 cout<<myStr[i]<<endl;
}

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
H
E
L
L
O

M
Y
  • 因使用静态数组声明方案,可以动态计算数组的长度。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myStr[8]= {'H','E','L','L','O','\0','M','Y'};
cout<<"数组的长度:"<<sizeof(myStr)<<endl;
for(int i=0;i<sizeof(myStr);i++){
 cout<<myStr[i]<<endl;
}

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
数组的长度:8
H
E
L
L
O

M
Y

使用sizeof(myStr)计算出来的是创建数组时指定的物理存储长度。

所以,这里要注意:

  • 通过结束符描述字符串是编译器层面上的约定。
  • 遍历时,实质是底层指针移动,这时,编译层面的字符串概念在这里不复存在。也就是说不存在遇到\0,就认为输出结束。

2.2 字符串常量

上述字符串的描述方式,略显繁琐,因需要时时注意添加\0C当然也会想到这一点,可以使用字符串常量简化字符串数组的创建过程。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myStr[8]="HELLO";
cout<<myStr<<endl;
//输出结果:HELLO

字符串常量需要使用双引号括起来。

当执行如下代码时,会出现错误。

错误提示,数组长度不够存储给定的数据。可能要问!

数组长度是5,实际数据HELLO的长度也是5,不是刚刚好吗。

别忘记了,完整的字符串是包括结束符\0的。在使用字符常量赋值时,编译器会在字符串常量的尾部添加\0,再存储到数组中,所以数组的长度至少是:字符串常量的长度+1

如下的代码方能正确编译运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myStr[6]="HELLO";
cout<<myStr<<endl;
//输出:HELLO

字符串常量只是上述{}赋值的语法简法版,其它的操作都是相同的,如循环遍历。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myStr[6]="HELLO";
for(int i=0;i<sizeof(myStr);i++){
 cout<<myStr[i]<<endl;
}

注意,如下的代码是错误的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myStr[6]="HELLO";
myStr[0]="S";

"S"表示一个字符串,至少包括了'S''\0' 2 个字符,更重要的是 "S"返回的是内存地址。

2.3 字符串操作

C语言风格的字符串提供了cstring库,此库提供大量函数用来操作字符串,常见函数如下:

  • strcat:字符串拼接。
  • strcpy:字符串复制。
  • strcmp:字符串比较。
  • strstr:字符串查找。
  • ……

下面介绍几个字符串的常见操作。

2.3.1 复制操作

C++中数组之间是不能直接赋值的,如下是错误的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myStr[6]="HELLO";
char myStr_[6];
//错误
myStr_=myStr;

可以使用cstring库中的 strcpy 函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char** argv) {
 char myStr[6]="HELLO";
 char myStr_[6];
 strcpy(myStr_,myStr);
 cout<<myStr_<<endl;
 return 0;
}

strcpy需要 2 个参数:

  • 目标字符串指针。
  • 源字符串指针。

其作用是,把源字符串复制给目标字符串。

2.3.2 长度操作

使用 strlen函数计算字符串的长度。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myStr[10]="HELLO";
cout<<strlen(myStr)<<endl;
//输出结果:5

sizeof计算出来的长度区别:

  • sizeof创建数组时,分配到的实际物理空/间的长度。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myStr[10]="HEL\0LO";
cout<<sizeof(myStr)<<endl;
cout<<strlen(myStr)<<endl;

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
10 
3
  • strlen计算出的是字符数组中字符串的实际长度,即遇到\0结束符前所有字符的长度。如下代码:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char myStr[10]="HEL\0LO";
cout<<strlen(myStr)<<endl;

输出结果是:3\0结束前的字符串是HEL

2.3.3 拼接操作

字符串常量之间可以使用空白(空格、换行符、制表符)字符自动完成拼接。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cout<<"this is a test" "hello world"; 
//输出:this is a testhello world

需要注意的地方是,第一个字符串常量和第二个字符串常量的拼接处直接连接,中间不保留空白符。

使用strcat进行拼接。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char** argv) {
 char names[10]="Hello";
 char address[10]="changsha";
 strcat(names,address);
 cout<<names; 
 return 0;
}
//输出:Hellochangsha

strcat是把第二字符串连接到第一个字符串后尾部。

2.3.4 字符串比较

字符能够直接比较,字符串则不能。如果相互之间有比较的需求时,可以使用 strcmp 函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <cstring>

using namespace std;
int main(int argc, char** argv) {
 char names[10]="zs";
 char names_[10]="ls";
 cout<<strcmp(names,names_); 
 return 0;
}
//输出结果:1

返回值的语义:

  • 如果返回值为小于 0,则names 小于 address
  • 如果返回值为 等于 0,则names 等于 address
  • 如果返回值大于 0,则names 大于 address
2.3.5 子字符串查找

在原子符串中查找给定的子字符串出现的位置,返回此位置的指针地址。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char** argv) {
 char srcStr[15]="Hello World";
 char subStr[5]="llo";
 cout<<strstr(srcStr,subStr); 
 return 0;
}
//输出:llo World

如果没有查找到,则返回null

cstring库提供了大量处理字符串的函数,如大小写转换函数tolowertoupper等。本文仅介绍几个常用函数,需要时,可查阅文档,其使用并不是很复杂。

3. C++字符串对象

C++除了支持C风格的字符串,因其面向对象编程的特性,内置有string类,可以使用此类创建字符串对象。

string类定义在string头文件中。

如下代码可以初始化字符串对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//空字符串
string str1;
//字符串常量直接赋值
string str2="Hello";
string str3 {"this"};
string str4("Hi");

string为了支持uncode字符编码,底层为每一个字符提供了1~4个字节的存储空间。

所以,可以用来存储中文:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string str="中国人";
cout<<str<<endl;
//输出:中国人

除了支持 char、还支持wchar_tchar16_tchar32_t数据类型。

string类中封装了很多处理字符串的相关函数(方法),在cstring库中可以找到对应的函数。因得益于设计的优秀特性,string类中封装的功能体相比较cstring库,更丰富、更全面。

下面介绍几个常用的功能,其它可以查阅文档。

获取字符串的常规信息:如长度、是否为空……

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string str="Hello World";
cout<<str.size()<<endl;
cout<<str.length()<<endl;
//是否为空
cout<<str.empty()<<endl;
//能存储的最大长度 
cout<<str.max_size()<<endl;
//容量 
cout<<str.capacity()<<endl; 

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
11
11
0
4611686018427387897
11

数据维护(增、删除、改、查)方法:

  • clear:清除所有内容。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string str="Hello World";
str.clear();
cout<<str<<endl;
//没有任何内容输出
  • insert:插入字符。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string str="Hello World";
string str_="Hi";
//第一个参数指定插入位置,第二参数指定需要插入的字符串
str.insert(3,str_);
cout<<str<<endl;
//输出结果:HelHilo World
  • erase:删除指定范围内的所有字符。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string str="Hello World";
//第一个参数:指定删除的起始位置,第二个参数:指定删除的结束位置
string str_= str.erase(1,3);
cout<<str_<<endl;
//输出:Ho World
  • push_backappend追加字符和字符串。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string str="Hello World";
//只能追加字符串,不能追加字符
str.append("OK");
cout<<str<<endl;
//只能以字符为单位追加
str.push_back('O');
cout<<str<<endl;
//输出结果:
//Hello WorldOK
//Hello WorldOKO
  • pop_back:删除最后一个字符。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string str="Hello World";
str.pop_back();
cout<<str<<endl;
//输出结果:Hello Worl
  • compare:比较两个字符串。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string str="Hello World";
string str_="Hello";
int res= str.compare(str_);
//返回值的语义和 `strcmp`一样。
  • copy:字符串的拷贝。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//源字符串
string foo("quuuux");
//目标字符串,数组形式
char bar[7];
//第一个参数,目标字符串,第二参数,向目标字符串复制多少
foo.copy(bar, sizeof bar);
bar[6] = '\0';
cout << bar << '\n';
//输出:quuuux

总结下来,字符串的存储方案有2 种:

  • 数组形式。
  • 字符串对象。

4. cin 输入字符串

如果需要使用交互输入方式获取用户输入的数据,可以直接使用 cin

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string str;
char bar[7];
cin>>str;
cin>>bar;
cout<<str<<endl;
cout<<bar<<endl;

如上代码,如果用户输入this is,因字符串有空白字符。则会出现获取到错误数据的问题。

原因解析:

cin接受用户输入时,以用户输入的换行符作为结束标识。用户输入this is时,遇到字符串的中间空白字符(空格、制表符、换行符)时,就认定输入结束,仅把this存储到str中,并不是this is

cin内置有缓存器,会把 is缓存起来,也就是说 cin是以单词为单位进行输入的。

当再次使用cin接受用户输入时,cin会检查到缓存器中已经有数据,会直接把is赋值给 bar变量。

如果需要以行为单位进行输入时,可以使用:

  • cin.get()方法。
  • cin.getline()方法。

上述 2 个方法主要用于字符串数组的赋值。

两者在使用时,都可以接受 2 个参数:

  • 目标字符串。
  • 用来限制输入的大小。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char str[20];
cin.get(str,10);
cout<<str<<endl;
//输入:this is 输出:this is

如下代码,能实现相同的效果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char str[20];
cin.getline(str,10);
cout<<str<<endl;

两者也有区别,cin.get()不会丢弃用户输入字符串时的结束符。在连续使用 cin.get有可能出现问题,如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char str[20];
char str_[20];
//第一次输入
cin.get(str,10);
cout<<str<<endl;
//第二次输入
cin.get(str_,10);
cout<<str_<<endl;

执行效果:

第二次接受用户输入的过程根本没出现。

原因是第一次接受用户输入后,cin.get缓存了用户输入的换行符。在第二次接受用户输入时,cin会首先检查缓存器中是否有数据,发现有换行符,直接结束输入。

解决方案,手动清除缓存器的数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char str[20];
char str_[20];
cin.get(str,10);
cout<<str<<endl;
//不带参数的 get 方法可以清除数据
cin.get(); 
cin.get(str_,10);
cout<<str_<<endl;

cin.getline在接受用户输入后,不会保留换行符,所以可以用于连续输入。如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char str[20];
char str_[20];
//第一次输入
cin.getline(str,10);
cout<<"str:"<<str<<endl;
//第二次输入
cin.getline(str_,10);
cout<<"str_:"<<str_<<endl;

如果要使用cin输入一行字符串,并赋值给字符串对象,则需要使用全局 getline函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//字符串对象
string str;
//第一个参数:cin对象  第二个参数:字符串对象
getline(cin,str);
cout<<str<<endl;

5. 总结

本文主要讲解了C++字符串的2种存储方案,一个是C语言风格的数组存储方案,一个是C++对象存储方案。

因存储方案不同,其操作函数的提供方式也不相同。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程驿站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
28、购物车结算页面-导航栏与地址选择布局
(1)老规矩,复制一份我们已经写好的test.vue页面初始化我们购物车页面cart.vue
Ewall
2018/09/30
2.1K0
28、购物车结算页面-导航栏与地址选择布局
微信小程序之购物车的交互场景
        JavaScript是小程序编程中的基础语言,JavaScript代码大约占整个小程序项目一半的代码量。全局文件app.js和所有的页面js文件都是由JavaScript来编写的,JavaScript代码主要实现业务逻辑处理和用户交互两方面的作用。
淼学派对
2022/11/20
8220
微信小程序之购物车的交互场景
Vue(9)购物车练习
需求:使用vue写一个表单页面,页面上有购买的数量,点击按钮+或者-,可以增加或减少购物车的数量,数量最少不得少于0,点击移除按钮,会移除该商品,当把所有的商品移除后,页面上的表单消失,然后出现文字:购物车为空,表单下方是商品的总价格,随着商品的数量增加而增加,默认是0元,总体效果如下:
全栈程序员站长
2022/09/16
6250
Vue(9)购物车练习
20、分类详情页之数据渲染
然后复制一系列就是我们左侧栏的各个标题了,记住这里的每个标题的id要和首页各个分类名的id相对应。
Ewall
2018/09/04
1K0
20、分类详情页之数据渲染
31、地址新增 — 定义数据结构与获取方式
(1)让我们进入addressEdit.vue页面填写一条地址,ok,现在假设你已经填写完毕。 (2)这个时候我们点击保存按钮且应该为这个按钮添加一个save事件,通过官方文档可知,我们可以通过这个事件获取填写表单的内容。
Ewall
2018/09/30
9060
31、地址新增 — 定义数据结构与获取方式
27、有赞Vant组件库的引入及轮播图片预览的实现②
这个vant组件与其它组件的引入方式不同,不需要在main.js中引入,直接在页面中引入即可:
Ewall
2018/09/30
2.7K0
27、有赞Vant组件库的引入及轮播图片预览的实现②
购物车原理以及实现
可以看到,购物车这样一个功能模块,在各种购物类APP或者web应用中绝对是必不可少的东西.不论在大学中的课程设计,还是在实际的项目开发中,绝对非常重要且有些复杂的内容. 在实际操作中,身边有很多的小伙伴遇到编写购物车的代码的时候,有时候真的是一脸懵逼,总是搞不明白设计的思路,这就是本文写作的原因. 所以,本文适合搞不清楚购物车实现原理,知道原理但是实际编码不知道如何下手的小伙伴,我将给出一个思路以及实际的代码供大家参考. 在本文中,我将会用尽可能简单的句子,表达出我想表达的意思.废话不多说,开始我们的购物车实战!
roobtyan
2019/02/21
6.4K0
购物车原理以及实现
40、个人中心页面
前言:本章把个人中心页面写完,基本上这个项目的前端页面制作方面的工作大体就完成了,其它不足的我们在前后端交互的时候继续完善。 GitHub:https://github.com/Ewall1106/
Ewall
2018/12/06
2.1K0
黑马瑞吉外卖之购物车功能开发(添加购物车和购物车数据展示)
我们点击到这个按钮的时候,那么就会绑定到这个方法。这个方法会将数据给这个窗体中的数据项赋值。这个diaglogFlavor其实就是定义初始化在vue的data里面。其实是可以看作一个列表。
兰舟千帆
2022/12/02
1.1K0
实战 | 微信小程序之购物车功能
作者 | 林鑫 链接 | http://imweb.io/topic/59128ea36936ba9165f5bed8 前言 以往的购物车,基本都是通过大量的 DOM 操作来实现。微信小程序其实跟 vue.js 的用法非常像,接下来就看看小程序可以怎样实现购物车功能。 需求 先来弄清楚购物车的需求。 单选、全选和取消,而且会随着选中的商品计算出总价 单个商品购买数量的增加和减少 删除商品。当购物车为空时,页面会变为空购物车的布局 根据设计图,我们可以先实现静态页面。接下来,再看看一个购物车需要什么样的数
用户1097444
2022/06/29
1.9K0
实战 | 微信小程序之购物车功能
购物车的原理以及实现
  今天模拟京东的购物车实现原理完成了购物车模块的开发, 给大家分享下。 京东的购物车实现原理:在用户登录和不登录的状态下对购物车存入cookie还是持久化到redis中的实现。下面就来具体说次购物车的实现过程 两种情况: 用户登录,购物车存入redis中 用户未登录,购物车存入cookie中 比较两种方式的优缺点:  cookie:优点:数据保存在用户浏览器中,不占用服务端内存;用户体检效果好;代码实现简单      缺点:cookie的存储空间只有4k;更换设备时,购物车信息不能同步;cookie禁用,
用户2146856
2018/05/18
2.4K0
用Vue写加入购物车小功能
上述代码中,我们创建了一个简单的商品页面组件,该组件显示商品的名称、描述和价格,并有一个 “加入购物车” 的按钮。当按钮被点击时,addToCart 方法会被调用,该方法通过 Vuex store 触发了名为 ‘m_cart/addToCart’ 的 mutation,将商品添加到购物车中。
用户10781437
2023/10/10
3060
Android仿淘宝购物车,玩转电商购物车
前言 其实做一个电商购物车,还真不是一个轻松的活。但是只要掌握思路,一步一步来做,就会发现也就这样。废物不多说,直接上效果图 完整代码,github链接,希望能给个星,谢谢 效果图 GIF1.gif
用户2032165
2018/06/05
2.9K0
前端购物车&订单结算模块详解
首先, 我们需要在vant中找到对应的组件, 这里是ActionSheet组件。 通过对ActionSheet组件的修改, 从而得到我们需要的内容。
用户11097514
2024/05/31
6740
前端购物车&订单结算模块详解
19、分类详情页之基本页面结构
具体关于路由的跳转就不多讲了,具体可以参考前面第5章vue-router之什么是编程式路由
Ewall
2018/09/04
6440
19、分类详情页之基本页面结构
用js+cookie实现商城的购物车功能
<input name="buy" type="image" alt="第一个商品" src="images/buy.gif" align="middle" onclick="getInfo();" style="float:left;" /> <h1>商品1</h1><br/> <input type="image" alt="第二个商品" src="images/buy.gif" align="middle" onclick='common.intoCart(88,"test",60,50,1);' style="float:left;" /> <h1>商品2</h1>
用户3055976
2018/09/12
3.7K0
用js+cookie实现商城的购物车功能
购物车中变与不变的数据处理
结算的时候,选中状态时本地修改,不会远程同步,一般在第一次获取数据后,处理数据,统一设置为未选中,每次选中或者不选中,直接更改本地数据后调用setState。
挥刀北上
2021/02/03
8000
购物车中变与不变的数据处理
京东购物车分页方案探索和落地
--导读-- 本文主要结合京东购物车的特性,从技术和业务层面综合考量,探索商品附属信息分页加载方案,为逐步扩容的购物车诉求做好底层技术支撑。通过本文,读者可以充分了解到主数据分页加载和附属信息分页加载分别适用哪些业务场景。在实际开发过程中,结合应用特性选择合适的分页技术方案,保证应用低碳高效运行。
京东技术
2023/01/05
1.2K0
京东购物车分页方案探索和落地
25、商品详情页
(1)复制一份test.vue文件并重命名为goodsDetail作为我们的商品详情页面
Ewall
2018/09/04
2.2K0
25、商品详情页
干货 | 京东购物车的Java架构实现及原理!
4)用户登陆了用户名密码,添加商品, 关闭浏览器 外地老家打开浏览器  登陆用户名和密码
美的让人心动
2018/05/30
2.8K1
推荐阅读
相关推荐
28、购物车结算页面-导航栏与地址选择布局
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • 1. 概念
    • 1.1 数据含义
    • 1.2 存储结构
  • 2. C 风格的字符串
    • 2.1 数组
    • 2.2 字符串常量
    • 2.3 字符串操作
      • 2.3.1 复制操作
      • 2.3.2 长度操作
      • 2.3.3 拼接操作
      • 2.3.4 字符串比较
      • 2.3.5 子字符串查找
  • 3. C++字符串对象
  • 4. cin 输入字符串
  • 5. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档