c++ 如果想要改变string对象中字符的值,必须把循环变量定义成引用类型

问题描述

c++ 如果想要改变string对象中字符的值,必须把循环变量定义成引用类型

c++primer上的一句话,不能理解为什么必须要用引用,这和用范围for不用引用有什么区别吗?
试了一下,不用引用输出时字符的值确实没有改变,这是什么原理呢,可以解释一下么?
跪求大神啊

解决方案

不用引用,你循环变量引用的就会是变量的拷贝,就没法修改实际变量

解决方案二:

#include
#include
using std::cout;
using std::endl;
using std::string;
int main()
{
string a("abcde!!!!");
for(auto i:a)
i=toupper(i);

cout<<a<<endl;
}

i不是对a的引用,这样的结果不能使a中字符变为大写

解决方案三:

#include
#include
using std::cout;
using std::endl;
using std::string;
int main()
{
string a("abcde!!!!");
for(auto i:a)
i=toupper(i);

cout<<a<<endl;
}

i不是对a的引用,这样的结果不能使a中字符变为大写

解决方案四:

i在这里跟a里面的字符并不是同一个,只是一份拷贝,
就好像x=y,x++,把y赋予x以后,改变x的值并不能改变y

时间: 2024-12-05 05:44:22

c++ 如果想要改变string对象中字符的值,必须把循环变量定义成引用类型的相关文章

从string对象中去掉标点符号

编一个程序,从string 对象中去掉标点符号.要求输入到程序的字符串必须含有标点 符号,输出结果则是去掉标点符号后的string 对象. 消除标点 #include <iostream> #include <string> #include <cctype> using namespace std; int main() { string s, result_str; bool has_punct = false; //用于标记字符串中有无标点 char ch; //

listview-如何从ListView中的string ArrayAdapter中获取文本值?

问题描述 如何从ListView中的string ArrayAdapter中获取文本值? 在程序中有两个 activity,第一个,列表视图的链接到html文件:第二个是一个 webview.例如,当我点击 listview 中的"First Topic" ,就会打开 webview中的 "1.html". 我想获得 listview 中点击元素的 text值,再用下面的方法显示在第二个activity中的textview中: TextView title = (T

java unicode-JAVA中字符的值是怎么得来的?

问题描述 JAVA中字符的值是怎么得来的? 在JAVA中,汉字我输出的值为25105,转换成16进制unicode编码为u6211.请问,这个数值如何得来?这其中与unicode又有何关联?谢谢! 解决方案 我自己来回答一下 在unicode码中 每一个字符对应一个十进制的数字和一个十六进制的编码,例如汉字"我"对应的十进制数值为25105.同时对应的十六进制编码为u6211.通过进制转换可以得出 u6211的十进制值为25105 解决方案二: [JAVA]unicode为12288字

Java反射获取基本类型、包装类型、String对象类型的字段值

package com.zkn.reflect.classinfo; import java.lang.reflect.Field; import java.lang.reflect.Type; import com.zkn.reflect.scope.Company; import com.zkn.reflect.scope.People; /** * <p>Title: </p> * * <p>Description: </p> * * * @since

string 对象及其操作

标准库类型string 标准库类型string表示可变长的字符序列,使用string类型必须首先包含string头文件.作为标准库的一部分,string定义在命名空间std中.接下来的示例都假定了已包含了下述代码: #include <string> using std::string;   本节描述最常用的string操作. 定义和初始化string对象 如何初始化类的对象是由类本身决定的.一个类可以定义很多种初始化对象的方式,只不过这些方式之间必须有所区别:或者是初始值的数量有所区别,或者

Javascript中的String对象详谈

 这篇文章主要介绍了Javascript中的String对象,需要的朋友可以参考下 Sting字符串对象是Javascript提供的内建对象之一.    这里特别注意,字符串中的第一个字符是第0位的,第二个才是第1位的.    1.创建一个字符串对象的方法    [var] String 对象实例名 = new String(string)    或者是var String 对象实例名 = 字符串值    例子:    var str = "Hello World";    var s

Javascript中的String对象详谈_javascript技巧

Sting字符串对象是Javascript提供的内建对象之一. 这里特别注意,字符串中的第一个字符是第0位的,第二个才是第1位的. 1.创建一个字符串对象的方法 [var] String 对象实例名 = new String(string) 或者是var String 对象实例名 = 字符串值 例子: var str = "Hello World"; var str1 = new String("This is a string"); 2.String的属性 len

Javascript中String对象的的简单学习

第十一课String对象介绍1:属性    在javascript中可以用单引号,或者双引号括起来的一个字符当作    一个字符对象的实例,所以可以在某个字符串后再加上.去调用String    对象的属性和方法.        例如    length返回string对象的长度,代表的是字符串当中字符的个数.    "大家好".length;//字符串的长度是3,每个汉子代表一个字符    2:常用方法    indexOf(substring[,startIndex])      

用JSON过滤对象中属性名相同时都会被过滤的情况,怎么解决

问题描述 我有一个需求:                    class  A {                            private String a;                            private B b;                            //set/get方法省略                     }                    class  B {                            pr