Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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++;:字符串反转不工作?_C++_String_Character Arrays - Fatal编程技术网

C++ C++;:字符串反转不工作?

C++ C++;:字符串反转不工作?,c++,string,character-arrays,C++,String,Character Arrays,我很难理解这段代码的输出 #include<iostream> #include<stdio.h> using namespace std; int main() { int i = 0; int j = 0; int k = 0; char ch[2][14]; char re[2][14]; cout << "\nEnter 1st string \n"; cin.getline(ch[0],

我很难理解这段代码的输出

#include<iostream>
#include<stdio.h>

using namespace std;

int main() {
    int i = 0;
    int j = 0;
    int k = 0;

    char ch[2][14];
    char re[2][14];

    cout << "\nEnter 1st string \n";
    cin.getline(ch[0], 14);

    cout << "\nEnter the 2nd string\n";
    cin.getline(ch[1], 14);

    for(i = 0; i < 2; i++) {
        int len = strlen(ch[i]);
        for(j = 0, k = len - 1; j < len; j++, k--) {
            re[i][j]=ch[i][k];
        }
    }
    cout << "\nReversed strings are \n";
    cout << re[0];
    cout << endl << re[1] << endl;
    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
int i=0;
int j=0;
int k=0;
char ch[2][14];
char-re[2][14];

不能确保
re[0]
re[1]
以null结尾

例如,在初始化期间,您可以执行以下操作

for (int i = 0; i < 14; i++)
{
    re[0][i] = '\0';
    re[1][i] = '\0';
}
for(int i=0;i<14;i++)
{
re[0][i]='\0';
re[1][i]='\0';
}
但除此之外,我建议使用
std::string
std::reverse
等等。

用于(I=0;I<2;I++)
for (i = 0; i < 2; i++)
{
    int len = strlen(ch[i]);
    for (j = 0, k = len - 1; j < len; j++, k--)
    {
        re[i][j] = ch[i][k];
    }
    re[i][len] = '\0';
}
{ int len=strlen(ch[i]); 对于(j=0,k=len-1;j
您必须终止反向字符串


另外,您还应该为
strlen()
函数包含

您忘记了数组中字符串的终止零
re
只需按以下方式定义数组

char ch[2][14] , re[2][14] = {};
                           ^^^^
还要考虑到您应该删除标题
,因为它没有被使用,而是包含标题

使用标准算法
std::reverse\u copy

比如说

 /* 
    Input : 
    hello
    world

    Output :
    olleh<some garbage value>dlrow
    dlrow
  */
#include <iostream>
#include <algorithm>
#include <cstring>

int main() 
{
    const size_t N = 2;
    const size_t M = 14;

    char ch[N][M] = {};
    char re[N][M] = {};

    std::cout << "\nEnter 1st string: ";
    std::cin.getline( ch[0], M );

    std::cout << "\nEnter the 2nd string: ";
    std::cin.getline( ch[1], M );

    std::cout << std::endl;

    for ( size_t i = 0; i < N; i++ )
    {
        std::reverse_copy( ch[i], ch[i] + std::strlen( ch[i] ) , re[i] );
    }

    for ( const auto &s : re ) std::cout << s << std::endl;

    return 0;
}
#包括
#包括
#包括
int main()
{
常数大小N=2;
常数大小M=14;
char ch[N][M]={};
字符re[N][M]={};

std::cout您应该使用。您还应该避免反转字符串。在许多情况下,按字节反转字符串(这就是
std::reverse
将要完成的,也是您在这里尝试的)例如,在处理UTF-8数据时,将产生非常意外和不正确的结果。您忘了终止strings@mch谢谢。它帮助了你,并且尽量避免在你的C++代码中包括STDIO。……如果需要的话,使用CSTDIO。