相关疑难解决方法(0)

你会如何改进这个算法?(c字符串反转)

通过我在网上找到的一些编程访谈挑战,我不得不编写一个算法来反转一个const char*并返回一个指向新char*的指针.我想我已经拥有它,但是为了让它正常工作,我不得不做一些不稳定的事情 - 基本上我必须自己考虑一个空终止的角色.不知怎的,我觉得这是错的,但我很难过,我想知道是否有人可以帮助我:

char * reverse(const char * str)
{
  int length = strlen(str);
  char * reversed_string = new char[length+1];

  for(int i = 0; i < length; ++i)
  {
    reversed_string[i] = str[(length-1) - i];
  }
  //need to null terminate the string
  reversed_string[length] = '\0';

  return reversed_string;

}

int main(int argc, char * argv[])
{

  char * rev_str = reverse("Testing");

  cout << "Your string reversed is this: " << rev_str << endl;

  delete rev_str;
  rev_str = 0;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ algorithm cstring

6
推荐指数
3
解决办法
8510
查看次数

反向C风格的字符串? - C++

我想使用指针来反转C++中的char数组.我想知道是否有什么我应该采取不同的做法?我这样做了吗?有没有更有效的方法来实现这一目标?

我的小程序:

int main ( )
{
    char buffer[80];

    PrintHeader();

    cout << "\nString reversal program";
    cout << "\nType in a short string of words.";
    cout << "\nI will reverse them.";
    cout << "\n:";
    cin.getline(buffer, 79);

    cout << "\nYou typed " << buffer;
    reverse (buffer);
    cout << "\nReversed: " << buffer;

    cout << endl;
    system("PAUSE");
    return 0;

}


void reverse(char* string)
{
    char* pStart, *pEnd;
    int length;
    char temp;

    length = strlen(string);

    pStart = string;
    pEnd = &string[length - 1];

    while(pStart …
Run Code Online (Sandbox Code Playgroud)

c++ arrays pointers

3
推荐指数
1
解决办法
1万
查看次数

'reverse_string'函数的冲突类型

我正在使用这个SO问题作为需要反转字符串的程序的一部分.我遇到的问题是我似乎无法使功能发挥作用.这是我的代码:

int main(int argc, char *argv[]){
  char *test = "Testing";
  fputs(test, stdout);
  fputs(reverse_string(test), stdout);
}

char* reverse_string(char *str){
  char temp;
  size_t len = strlen(str) - 1;
  size_t i;
  size_t k = len;
  for(i = 0; i < (len +1)/2; i++){
    temp = str[k];
    str[k] = str[i];
    str[i] = temp;
    k--;
  }  
  return str;
}
Run Code Online (Sandbox Code Playgroud)

我收到了一个错误 conflicting types for 'reverse_string'

编辑:对于任何想知道这里的人来说,代码是有效的.请参阅@ chux的答案以获得解释.

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char* reverse_string(char *str){
  char temp;
  size_t len = strlen(str) - 1; …
Run Code Online (Sandbox Code Playgroud)

c string

3
推荐指数
1
解决办法
719
查看次数

哪些C编译器有指针减法下溢?

因此,正如我从Michael Burr 对此答案的评论中所学到的,C标准不支持从数组中第一个元素之后的指针进行整数减法(我想这包括任何已分配的内存).

C99 + TC1 + TC2组合的 6.5.6节(pdf):

如果指针操作数和结果都指向同一个数组对象的元素,或者指向数组对象的最后一个元素,则评估不应产生溢出; 否则,行为未定.

我喜欢指针算法,但这从来都不是我以前所担心的.我一直认为给定:

 int a[1];
 int * b = a - 3;
 int * c = b + 3;
Run Code Online (Sandbox Code Playgroud)

那个c == a.

因此,虽然我相信我以前做过那样的事情而且没有被咬过,但这一定是由于我曾经使用的各种编译器的善意 - 他们已经超出了标准要求的范围.使指针算术以我认为的方式工作.

所以我的问题是,这有多常见?是否有常用的编译器不能为我做那种善意?超出数组边界的正确指针算法是一个事实上的标准吗?

c arrays compiler-construction pointers pointer-arithmetic

2
推荐指数
1
解决办法
812
查看次数