通过temp提供的输入是一个句子,我需要删除空格和特殊字符,但是' mes'只储存第一个单词
#include <iostream>
#include <cmath>
using namespace std;
int main(){
char mes[51];
char pas[11];
char tem[51];
cin.getline(tem,51);
cin.getline(pas,11);
for(int i=0;i<51;i++){
mes[i]='\0';
}
for(int t=0;t<sizeof(pas);t++){
pas[t]=tolower(pas[t]);
}
for (int i=0;i<50;i++){
char c=tem[i];
int ch=(int)c;
if(( ch >= 65 && ch <= 90) || ( ch >= 97 && ch <= 122)){
if( ch >= 65 && ch <= 90)
ch+=32;
mes[i]=(char)ch;
}
else
continue;
}
cout<<mes<<endl;
答案 0 :(得分:0)
请注意,您要将mes
中的每个索引设置为'\0'
,即NUL
。当您通过tem
迭代检查每个字符是否为字母时,您无意中将\0
内的字mes
分开。你需要有一个单独的索引,允许你在找到它们时添加它们。
您的for
循环可能如下所示。
int currentIndex = 0;
for (int i = 0; i < 50; i++){
char c = tem[i];
int ch = (int)c;
if(( ch >= 65 && ch <= 90) || ( ch >= 97 && ch <= 122)){
if( ch >= 65 && ch <= 90)
ch+=32;
mes[currentIndex++]=(char)ch;
}
else
continue;
}
这样,您将在下一个之后直接添加该字母,而不是像Hello\0World
那样。
另外,请记住cout
只会在找到\0
字符之前打印字符串。从技术上讲,您将存储在句子中找到的所有字母,但它们由\0
分隔,因此,cout
仅打印第一个单词。