代码输出随机符号,我不确定是什么错误

时间:2019-11-02 19:40:10

标签: c++ string loops

我制作了一个程序,可以将全名缩写为缩写,并删除输入的内容之间的所有空格。它以前曾经工作过,但现在可以打印首字母以及随机符号吗?我真的不知道为什么要这么做。我也是编程的新手。

这是我的代码:

 // This code removes the spaces from the inputted name 

char *removeSpaces(char *str) 
{ 
    int i = 0, j = 0; 
    while (str[i]) 
    { 
        if (str[i] != ' ') 
           str[j++] = str[i]; 
        i++; 
    } 
    str[j] = '\0'; 
    return str; 
} 

// This code takes the users name, and shortens (sh) it

int main(void) {

    char str[100],sh[20];
    int j=0;

    cout<<"Enter Full Name :";
    cin.getline(str,30);

    for(int i=0;i<strlen(str);i++)
      {
       if(i==0){
         sh[j]=str[i];
         sh[++j]=' ';
        }

       else if(str[i]==' '){
         sh[++j]=str[i+1];
         sh[++j]=' ';
        }
       }

// This then takes the remove spaces code, and prints the initials with a new line

    cout << removeSpaces(sh) <<endl;
    cout << "\n" <<endl;

   return 0;
}

Picture of the output

3 个答案:

答案 0 :(得分:1)

您缺少在字符串sh中添加字符串终止符('\ 0')。下面是程序。

#include <stdio.h>

char *removeSpaces(char *str) 
{ 
    int i = 0, j = 0; 
    while (str[i]) 
    { 
        if (str[i] != ' ') 
           str[j++] = str[i]; 
        i++; 
    } 
    str[j] = '\0'; 
    return str; 
} 

// This code takes the users name, and shortens (sh) it

int main(void) {

    char str[100],sh[100];
    int j=0;

    cout<<"Enter Full Name :";
    cin.getline(str,30);

    for(int i=0;i<strlen(str);i++)
      {
       if(i==0){
         sh[j]=str[i];
         sh[++j]=' ';
        }

       else if(str[i]==' '){
         sh[++j]=str[i+1];
         sh[++j]=' ';
        }
       }

       sh[j+1] = '\0';

// This then takes the remove spaces code, and prints the initials with a new line

    cout << removeSpaces(sh) <<endl;
    cout << "\n" <<endl;

   return 0;
}

输入全名:ra me ge

答案 1 :(得分:1)

for函数的main循环之后,您错过了一行(我想),这意味着您的字符串可能不是以空字符结尾的。

使用与removeSpaces函数相同的逻辑,只需在for中的main循环之后紧随其后添加此行:

sh[++j] = '\0';

答案 2 :(得分:0)

完成后,您不会用sh终止\0,但是removeSpaces()期望在字符串末尾有一个空字符。因此,removeSpaces()可能会超出您的预期边界。

只需在for中的main()之后添加以下行:

sh[++j] = '\0\;

警告语::设置前,请始终确保j小于20(sh的大小)。否则,您可能会越过sh的边界。这也可能成为问题的根源。