Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 更改字符数组中的字符_C++_Arrays_Function_Pointers - Fatal编程技术网

C++ 更改字符数组中的字符

C++ 更改字符数组中的字符,c++,arrays,function,pointers,C++,Arrays,Function,Pointers,我在以下任务中遇到问题: 接受有限字符数组 更改数组中的给定字符 打印更改的字符数组 这是我的密码: #include <iostream> using namespace std; void change(const char* source, char* target) { int j; for (j = 0; j < 100; j++) { if (source[j] == '.') { target[j] = '\n'; }

我在以下任务中遇到问题:

  • 接受有限字符数组
  • 更改数组中的给定字符
  • 打印更改的字符数组
  • 这是我的密码:

    #include <iostream>
    using namespace std;
    
    void change(const char* source, char* target) {
      int j;
    
      for (j = 0; j < 100; j++) {
        if (source[j] == '.') {
          target[j] = '\n';
        }
    
        else {
          target[j] = source[j];
        }
      }
    
      return;
    }
    
    int main() {
      int i;
      char input[100] = {0}, output[100] = {0};
    
      cout << "Bitte geben Sie einen Text ein: " << endl;
      cin >> input[100];
    
      change(&input[100], &output[100]);
    
      for (i = 0; i < 100; i++) {
        cout << output[i];
      }
    
      return 0;
    }
    
    #包括
    使用名称空间std;
    无效更改(常量字符*源,字符*目标){
    int j;
    对于(j=0;j<100;j++){
    如果(源[j]='.'){
    目标[j]='\n';
    }
    否则{
    目标[j]=源[j];
    }
    }
    回来
    }
    int main(){
    int i;
    字符输入[100]={0},输出[100]={0};
    cout输入[100];
    更改(&输入[100],&输出[100]);
    对于(i=0;i<100;i++){
    
    这比你想象的要容易,试试这个版本

    cin >> input;
    
    change(input, output);
    
    认为
    input[100]
    以某种方式代表了整个数组是初学者常见的误解。事实并非如此

    声明数组时,
    []
    之间的数字是数组的大小,但使用数组时,
    []之间的数字是
    是您希望访问的元素的索引。这些是完全不同的含义,您不应混淆。此外,由于大小为100的数组只有0到99的有效索引
    input[100]
    实际上正在尝试访问数组中不存在的元素

    另一个错误是,您需要将循环限制为字符串的实际长度,这可能小于100

    您可以使用
    strlen
    函数查找字符串的长度,如下所示

    int length = strlen(output);
    for (i = 0; i < length; i++) {
        cout << output[i];
    }
    
    int length=strlen(输出);
    对于(i=0;icout用另一种方式看这个节目:

    #包括
    #包括
    使用std::cin;
    使用std::cout;
    使用std::endl;
    //仅接受预定长度的数组
    无效更改(常量字符和源)[100],字符和目标)[100])
    {
    int j=0;
    对于(;j<100&&source[j]!='\0';++j)
    {
    目标[j]=(源[j]='。)?“\n”:源[j];
    }
    //确保我们使用空终止字符串
    目标[std::min(j,100-1)]='\0';
    }
    int main()
    {
    字符输入[100];
    cout-input;//读取到第一个非空格,通常是一个“单词”
    字符输出[100]={};
    变化(输入、输出);
    对于(int i=0;i<100&&output[i]!='\0';i++)
    {
    
    您的代码在这里(和其他类似的地方)是否有未定义的行为:
    input[100]
    ,如果您声明了一个包含100个元素的
    char
    数组,则有效索引从
    0
    99
    。因此,点击这一行后,您的程序可能会出现很多问题。我们无法判断会发生什么,但告诉您:永远不要这样做。在询问家庭作业问题时,请尝试将您的问题简化为一个小问题您遇到的具体问题,而不仅仅是说“我的代码不工作”@JarMan抱歉,第二次在这里发帖,我将尝试在以后的问题中这样做。一个关于特殊酱汁的快速新程序员注释,它使
    strlen
    工作。用于表示字符串的字符数组总是以字符串中不存在的特殊字符null结尾。
    strlen
    读取,直到找到术语I为止nator。如果您忘记放置终止符,
    strlen
    将一直读取,直到找到终止符为止,没有人能够安全地预测何时会找到终止符。所有基于字符数组的字符串操作函数都以相同的方式运行,因此您必须关注这些空终止符。常见错误的主要来源。