数组不存储在第一个空格之外

时间:2018-05-05 01:10:16

标签: c++ arrays input character

通过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;

1 个答案:

答案 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仅打印第一个单词。