如何使用命令行反转字符串?

时间:2017-10-12 17:05:09

标签: c command-line

我正在尝试使用命令行参数反转字符串,但我不知道为什么我会因此而出现分段错误。

var groups = myList
                .AsParallel()
                .GroupBy(x => x.c1)
                .Where(x => x.Count() > 1);

foreach (var group in groups)
{
    foreach (var value in group)
    {
        //duplicate values
    }
}

4 个答案:

答案 0 :(得分:1)

您必须为反向字符串分配内存,并使rev指向该位置。

 char *rev = malloc(strlen(argv[1]) + 1); // 1 extra space to store null character.

并在结尾处终止反向字符串

rev[j] = '\0';

答案 1 :(得分:0)

for for循环

    for(j = 0; j <= i-1; j++)
    {
        rev[j] = str[k];
        k--;
    }
    //Add this line
    rev[j]='\0'; //always terminate character array with null.
    printf("The reverse string is %s\n",rev);

答案 2 :(得分:0)

代码中存在多个问题:

  • ;
  • 中有一个额外的for(i = 0; str[i] != '\0'; i++); {
  • 您将字符存储到rev但该指针未初始化,行为未定义。

你可以用这种方式反转字符串:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    if (argc > 1) {
       char *str = argv[1];
       int i, j, len = strien(str);

       for (i = 0, j = len - 1; i < j; i++, j--) {
           char c = str[i];
           str[i] = str[j];
           str[j] = c;
       }
       printf("The reverse string is %s\n", str);
    }
    return 0;
}

答案 3 :(得分:-1)

您可以使用递归。例如

#include <stdio.h>

int main( int argc, char * argv[] ) 
{
    if ( !( argc < 2 ) )
    {
        if ( !*argv[1] )
        {
            printf("The reverse string is " ); 
        }
        else
        {
            ++argv[1];
            main( argc, argv );
            --argv[1];
            putchar( *argv[1] );
        }
    }

    return 0;
}