0

我试图通过调用函数来输出字符串的反转。我认为我的反向功能有问题。我不断收到错误消息“并非所有控制路径都返回值”。

#include<iostream>

using std::cout;
using std::endl;
using std::cin;
int LengthofString(    char *); // declaring prototype for length of the string 
int ReverseD(char *);

int main()
{
    char string1[100];
    cout<<"Enter a string: ";
    cin>>string1;

    cout<<"Length of string is "<<LengthofString(string1)<<endl<<ReverseD(string1)<<endl;

    system("PAUSE");
    return 0;
}

int LengthofString(   char *x)
{
    int index;
    for(index = 0; *x!='\0';x++,index++);

    return index;
}

int reverse(char* y)
{
  int ii, n;
  n = LengthofString(y); 
  for(ii=0; ii<n/2;ii++) {
    char temp;
    temp = y[ii];
    y[ii] = y[n - ii - 1];
    y[n - ii] = temp;
    return temp;
  }
}
4

5 回答 5

3

reverse函数中,你returnfor循环中,如果条件满足,它可能不会被执行。尝试将 return 语句移到循环之外。

您的返回变量也在循环范围内声明,因此您也需要更改它,但这至少可以修复您的原始错误。

于 2013-06-18T19:00:05.223 回答
2

您的reverse函数非常错误:int当您期望它反转字符串时,它怎么会返回?有几种方法可以修复它:

  • 删除return, 并制作函数void. 打印前调用它,然后输出原件。
  • 让它返回char*,然后返回y。将return语句移出循环。
  • 不要原地反转:复制字符串,并反转它;不要忘记为空终止符分配空间,并在完成后删除字符串的副本。
于 2013-06-18T19:03:47.100 回答
1

当您传递一个空字符串或长度为 1 的字符串时,return以下for循环中的语句将不会被执行,

for(ii=0; ii<n/2;ii++) {
     char temp;
     temp = y[ii];
     y[ii] = y[n - ii - 1];
     y[n - ii] = temp;
     return temp;
}
于 2013-06-18T19:03:07.357 回答
0

除了已经存在的优秀答案之外,让我向您展示如何以C++ 方式反转字符串:

#include <string>
#include <iostream>
#include <algorithm>

int main()
{
    std::string s;
    std::cin >> s;
    std::reverse(s.begin(), s.end());
    std::cout << s << std::endl;

    return 0;
}

编辑:必须使用自己的函数不是用 C++ 编写 C 代码的借口......

std::string reverseString(const std::string &input)
{
    std::string res;
    for (std::string::const_reverse_iterator it = input.rbegin(); it != input.rend(); it++)
        res += *it;

    return res;
}
于 2013-06-18T19:18:46.450 回答
0
int reverse(char* y)
{
  int ii, n;
  n = LengthofString(y); 
  for(ii=0; ii<n/2;ii++) {
    char temp;
    temp = y[ii];
    y[ii] = y[n - ii - 1];
    y[n - ii] = temp;
    return temp;
  }
//because here you done have a return call; return something
}
于 2013-06-18T19:03:22.270 回答