c++-C++字符串问题,char type[10]跟string type 有什么区别?

问题描述

C++字符串问题,char type[10]跟string type 有什么区别?

这是在刘汝佳的书上的一道例题,我做的时候遇到了一个问题,我是新手,请指点。
#include
using namespace std;
int m,n;
int a[100000+10];
int main(){
int shift_circular_left(int,int);
int shift_circular_right(int,int);
int find(int);
cin>>m>>n;

for(int i=1;i<=m;++i){
a[i]=i;
}
char type[10]; //在这一行定义的时候为什么用string type会错?

int x,y,p,q;
for(int i=0;i
scanf("%s%d%d",type,&x,&y);
p=find(x);
q=find(y);
if(type[0]=='A'){
if(q>p)shift_circular_left(p,q-1);
else shift_circular_right(p,q);
}
else{
if(p<q)shift_circular_left(p,q);
else shift_circular_right(q+1,p);
}
}
for(int i=1;i<=m;++i){

cout<<a[i]<<' ';
}
return 0;
}

int shift_circular_left(int x,int y){
int t=a[x];
for(int i=x;i<=y-1;++i){
a[i]=a[i+1];
}
a[y]=t;
}

int shift_circular_right(int x,int y){
int t=a[y];
for(int i=y;i>=x+1;--i){
a[i]=a[i-1];
}
a[x]=t;
}

int find(int x){
for(int i=0;i<=m;++i){
if(a[i]==x)return i;
}
}
在定义type的时候,为什么必须用字符数组,不能用字符串类型?

解决方案

scanf不能读取string型的变量,string型的是c++特有的,只是因为c++能和c兼容所以能用scanf但是scanf的功能还是没有变

解决方案二:

char s[10] 指的是:一个指针,这个指针指向10个char的内存空间。string 是一个类。有自己的成员函数和变量。

解决方案三:

string 对象是堆内存。char s[10];是栈内存 ,所以scanf是不行的,他是需要构造的或者说用c++中的cin 也可以啊....

解决方案四:

#if 1
#include
#include
using namespace std;

int main()
{
string s;
cin >> s;
cout << s;
return 0;
}
#endif

其实最重要的一点是string 类型的对象 你永远都不知道他的成员变量指向哪里。那么你直接输入肯定会出问题,

时间: 2024-10-03 07:38:11

c++-C++字符串问题,char type[10]跟string type 有什么区别?的相关文章

关于char * ch指针和char ch [10]数组的区别

问题描述 关于char * ch指针和char ch [10]数组的区别 char ch1[10];char * ch2;如果现在要将一个c风格字符串赋给这两个对象,void copy1(char ch1[10]char * temp)void copy2(char * ch2char * temp)为什么后者可以直接ch2=temp而前者只能用strcpy? 解决方案 ch2是指针,所以=temp,其实做的是指针地址赋值而已,这样ch2也指向temp那一块内存 而ch1是一个数组,你要给它赋值

java中语句char mychar=10是合法的吗?

问题描述 java中语句char mychar=10是合法的吗? java中语句char mychar=10是合法的吗?按照我的理解,10在java中默认为int型,把一个int型赋值给char不会发生自动类型转换,所以是不合法的.可是书上却出现了这条语句,难道我的理解是错误的吗? 解决方案 合法滴,在表示数字的字符是可以不用加引号 解决方案二: 合法的,char本身就是用一个字节的整型存储的,你把mychar=81再把mychar打印出来会发现打印的是A,去看看asc2码表你就明白了 解决方案

c++-string字符串转char* 之后变成空字符串是怎么回事?

问题描述 string字符串转char* 之后变成空字符串是怎么回事? string字符串转char* 之后变成空字符串是怎么回事?百思不得其解 解决方案 你具体的代码是什么,string是否用的c_str()来转换的 解决方案二: 建议楼主贴一下转换char *的代码 解决方案三: string它转化为const char*的方法 string s1 = "hellow"; const char * char1 = s1.c_str(); 解决方案四: 代码在公司,我把形式大概列举一

java学习:字符串比较“==”与“equals”的差异及与c#的区别

.net中,其字符串特有的驻留机制,保证了在同一进程中,相同字符序列的字符串,只有一个实例,这样能避免相同内容的字符串重复实例化,以减少性能开销. 先来回顾一下c#中的代码: View Code 1 public static void testString() 2 { 3 String s = "Abc"; 4 String s1 = "abc"; 5 String s2 = "abc"; 6 7 8 Console.WriteLine(&qu

android-Value ? of type java.lang.String cannot be

问题描述 Value ? of type java.lang.String cannot be public class Register_ extends Activity{ private ProgressDialog pDialog; JSONParser jsonParser = new JSONParser(); EditText name; EditText password; Button login_button; private static String url = "htt

c++的问题- error C2440: “默认参数”: 无法从“const char [7]”转换为“std::string &amp;amp;amp;”

问题描述 error C2440: "默认参数": 无法从"const char [7]"转换为"std::string &" 代码如下: 1 #include 2 using namespace std; 3 class Student{ 4 string name; 5 public: 6 Student(string& n ="noName") :name(n){} 7 }; 8 class Teache

Cannot convert value of type [java.lang.String] to required type [java.util.Date] for property &#039;xxx&#039;: no matching editors or conversion strategy found

今天在完成项目的时候遇到了下面的异常信息: 04-Aug-2014 15:49:27.894 SEVERE [http-apr-8080-exec-5] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [cms] in context with path [/cms] threw exception [Request processing failed; nested excep

《从缺陷中学习C/C++》——6.10 delete与delete[]的区别

6.10 delete与delete[]的区别 从缺陷中学习C/C++代码示例 char *buff = new char[reslen]; delete buff; 现象&结果申请的数组空间没有全部释放,造成内存泄露.用cppcheck工具执行静态代码扫描可以看到如下信息:(error) Mismatching allocation and deallocation: buf. Bug分析对于数组类型,如 string str = new string[10],用delete str和dele

深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换

本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下-复制代码 代码如下:    #ifndef USE_H_      #define USE_H_      #include <iostream>      #include <windows.h>      #include <string>      using namespace std;      class CUser