使用for循环将char数组的一个元素复制到另一个元素

copying one element of a char array to another using for loop

本文关键字:元素 一个 复制 另一个 循环 for char 数组 使用      更新时间:2023-10-16

我正在尝试编写一个简单的程序,它接受一个字符数组,并将其向后吐出。我知道有很多其他方法可以使用库头函数来缩短这一点,但我想使用for循环来做这件事,只是为了习惯它们。

#include<stdio.h>
#include<iostream>
using namespace std;
char string1[10];
int count = 0;
char stringy[10];
void enterString()
{
    cout << "please enter a string: " << endl;
    cin >> string1;
}
void stringCounter(const char stringLength[])
{
    //initiate for loop i = 0
    //if stringLength[i] does not does not equal 'i' then carry on
    //increment i
    for (int i = 0; stringLength[i] != ''; i++)
    {   
        count++;
    }   
    cout << "size of string is: " << count << endl;
}
void reverseString(int arraySize, char string2[])
{
    int counter = 0;
    for (int i = arraySize; i >= 0; string2[i--])
    {   
        stringy[counter] = string2[i];
        counter++;
    }   
    stringy[count] = '';
    cout << stringy << endl;
}
int main()
{
enterString();
stringCounter(string1);
reverseString(count, string1);
return 0;
}

这就是整个程序。程序在函数reverseString中失败。我不知道如何成功读取char array string2[]的最后一个索引并将其复制到char array stringy的第一个索引中。

One,如果用户输入的字符串长度超过10个字符,则enterString()函数将在cin>>string1处访问超出其绑定的数组。因此,最好使用getline来确保读取的内容不会超过数组所能容纳的内容。

第二,在当前的实现中,如果arraySize<=10reverseString()函数将写入具有null终止符的数组的第一个元素,并且尝试显示该字符串不会显示任何内容。

此:

 cin >> string1;//will try to access the array out of its bound if user give more than it can hold,i.e 10 characters
 ...
 for (int i = arraySize; i >= 0; string2[i--])
 {   
    stringy[counter] = string2[i];//the first iteration will put the '' character as the first elements of stringy
     counter++;
 } 

应更改为:

cin.getline(string1,10);//make sure to get not more than 10 characters,including the null terminator
 .....
for (int i = arraySize-1; i >= 0; i--)
{   
    stringy[counter] = string2[i];
    counter++;
} 

您的程序中有很多错误。如果这正是您正在编译的代码,那么它应该会抛出许多错误。以下内容可能会有所帮助。

#include<iostream>
using namespace std;
void reverseString(int , char *);
int stringCounter(const char );
int stringCounter(const char stringLength[])
{
    int count = 0;
    for (int i = 0; stringLength[i] != ''; i++)
        count++;
    cout << "size of string is: " << count << endl;
    return count;
}
void reverseString(int arraySize, char string2[])
{
    int counter = 0;
    char stringy[100];
    for (int i = arraySize - 1; i >= 0; i--)
    {
        stringy[counter] = string2[i];
        counter++;
    }
    stringy[counter] = '';
    cout << stringy << endl;
}
int main()
{
    char str[] = "string";
    reverseString(stringCounter(str),str);
    return 0;
}