c++ 如何把字符串清空
........
中间给a付了值
怎么再把a给清空呢
strcpy(a,"");这样可以吗 展开
方法一:
#include<iostream>
#include <string>
using namespace std;
void deletestr(const char *str, const char* sub_str, char *result);
int main()
{
char str[100],sub[100];
cin>>str;
cin>>sub;
char result;
deletestr(str,sub,&result);
return 0;
}
void deletestr(const char *str, const char* sub_str, char *result)
{
int sublen = 0; //获得子串的长度
const char *t = sub_str;
while(*t++ != '\0')
{
sublen++;
}
int pos = 0;
int pp = 0;
int repos = 0; // 结果子串的索引
while(*(str + pos) != '\0')
{
char t = *(str + pos);
if(t == *(sub_str + pp)) // 重复子串起始位置
{
*(result + repos) = t;
repos++;
if(pp < sublen - 1) // 还未完全重复
{
pp++;
}
else if(pp == sublen - 1) // 完全重复了
{
pp = 0;
repos -= sublen; // 回溯下标位置
}
}
else{ // 不是一样的字符
*(result + repos) = t;
repos++;
}
pos++;
}
*(result + repos) = '\0';
cout<<result<<endl;
}
方法二:用STL
#include<iostream>
#include <string>
using namespace std;
void deletesub(string &str,const string &sub,int n);
int main()
{
string str,sub;
cin>>str;
cin>>sub;
int n=sub.size();
deletesub(str,sub,n);
return 0;
}
void deletesub(string &str,const string &sub,int n)
{
int m,flag=0,num=0;//num是子串出现的次数
while(flag==0)
{
m=str.find(sub);
if(m<0)
flag=1;
else
{
str.erase(m,n);//删除子串
num++;
}
}
// cout<<num<<endl; //子串出现的次数
cout<<str<<endl;// 输出删除后的字符串
}
扩展资料
chara使用方法:
C语言中char用于定义字符类型变量或字符指针变量,例如“chara;”则定义了变量a是字符类型,“char*a;”则定义了变量a是字符指针类型。
char是C语言整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed,但char在标准中不指定为signed/unsigned,编译器可以实现为带符号的,也可以实现为不带符号的。
关于char还有一个特殊的语言就是char*,它在C语言中有专门的语义,既不同于signedchar*,也不同于unsignedchar*,专门用于指以'\0'为结束的字符串。
C语言所有基本数据类型:
void:声明函数无返回值或无参数,声明无类型指针,显示丢弃运算结果。
char:字符型类型数据,属于整型数据的一种。
int:整型数据,表示范围通常为编译器指定的内存字节长。
float:单精度浮点型数据,属于浮点数据的一种。
double:双精度浮点型数据,属于浮点数据的一种。
char a[80];
1、memset() 给指定内存置相应的值
#include <string.h> //引用相关头文件
memset( a, 0, sizeof(a) ); //把从a开始的80个字符全置为0
2、循环遍历数组,逐位清0
for( int i=0;i<sizeof(a);i++ )
a[i]=0; //该循环达到memset()函数的效果。
3、所谓的字符串清空:
strcpy(a, ""); 本句相当于 a[0]=0 ;
这里只是完成了数组a的首地址置0,0是字符串结束符'\0'的ascii值,这样赋值后,只是表示一个空字符串,而剩余的数组位置上的数据还是原来存储的内容不会有变化的。所有的字符串操作函数,都会遇0而止的,所以,用户看不到后面位置上的垃圾数据。
memset(a,0,sizeof(a));
头文件
#include<MEM.H>
strcpy(a," ");这样可以的,也可以将它置空
例如:
char *a=new char(80);
然后
delete [ ]a;
释放空间,就行;
至于字符串清空,建议你用 a={ };
a[0]=0;
补充:
听哥的,错不了。你去搜索下C字符串的原理就知道了。